خانه » ادوبی ایر » SharedObject در فلش

SharedObject در فلش

SharedObject در فلش

در این مطلب به کلاس SharedObject در اکشن اسکریپت ۳ می پردازیم ، توسط این کلاس شما می توانید اطلاعاتی را مانند کوکی در وب ، به صورت اختصاصی برای فلش پلیر ذخیره کنید ، مثلا می توانید آخرین تنظیماتی که کاربر بعد از ورود به سایت شما اعمال کرده را به صورت کوکی توسط SharedObject ذخیره کنید و در زمان بازدید مجدد آن را به کاربر نمایش دهید ، و یا مثلا آخرین جا به جایی اشیاء در صفحه را که کاربر انجام داده در ورود به بعدی کاربر با همان حالت به او نمایش دهید و یا اطلاعات مربوطه به نظر دادن مثل نام و ایمیل و دیگر اطلاعاتش را برای استفاده دوباره ذخیره کنید و یا آخرین رکورد های ثبت شده توسط فرد در یک بازی برای نمایش به فرد ، یا پیشرفت در مرحله های آن بازی و صد ها استفاده دیگر که بستگی به نیاز شما دارد.

ابتدا مثالی ساده را برای درک بیشتر شما از موضوع برسی می کنیم ، در این نمونه اشیاء موجود در صفحه را جا به جا کنید و سپس صفحه را رفرش کنید و باقی ماندن اشیاء در آخرین جا به جایی را مشاهده کنید :

برای مشاهده نیاز به فلش پلیر دارید

در این آموزش به موارد زیر می پردازیم

  • استفاده از متد getLocal
  • ذخیره اطلاعات SharedObject
  • بازیابی اطلاعات SharedObject
  • حذف اطلاعات SharedObject
  • نمونه تمرین آموزشی

متد getLocal() از اصلی ترین بخش کلاس SharedObject است ، بر خلاف اکثر کلاس های اکشن اسکریپت که می بایست ابتدا آن ها را new کنید ، به صورت مستقیم می توانید ، این متد را از کلاس فراخوانی کنید.

روش استفاده از این متد و تعریف محل ذخیره سازی داده ها :

var myVariableName:SharedObject = SharedObject.getLocal("mySharedObjectID");

متغیری که ایجاد می کنید که ایجاد می کنید ، در داخل برنامه شما به شی SharedObject اشاره و برگشت داده می شود و شناسه و مقداری که به عنوان آرگمان ورودی متد وارد می کنید ، شناسه محل ذخیره سازی و بازیابی حافظه فلش پلیر می باشد.

شاید بخواهید برای ذخیره داده ها بیش از یک شناسه تعیین کنید ، اما این امکان وجود ندارد و تنها برای هر مورد می توانید تنها یک فضای اشتراکی sharedObject تعریف کنید ، شی مربوط به فضای اشتراکی می تواند تعداد زیادی خصوصیت را در خود ذخیره کند. البته باید توجه داشته باشید که محدودیت ذخیره داده ها با توجه به تنظیمات کاربر استفاده کننده است که از بخش setting فلش پلیر تنظیم می کند، به صورت پیش فرض نهایتا ۱۰۰ کیلو بایت فضا اختصاص داده شده است ولی امکان تنظیم روی مقدار بیشتر و حتی نامحدود توسط کاربر وجود دارد. با توجه به این خصوصیت می تواند برای ذخیره اطلاعات کوتاه و مهم مثل رکورد ثبت شده یک بازی و یا اطلاعات شناسایی یک کاربر و موارد این چنینی استفاده مفیدی داشته باشد.

برای شروع می بایست ابتدا یک شی از نوع SharedObject ایجاد کنید و شناسه ذخیره سازی را تعیین نمایید :


var mySharedObject:SharedObject = SharedObject.getLocal("iflashlord");

در ادامه به نحوه ذخیره داده های در SharedObject می پردازیم :

استفاده ساده از کلاس SharedObjects

برای ذخیره کردن داده های در یک Shared Object می بایست مراحل زیر را طی نمایید :

  1. تعریف یک متغیر و ساخت یه نمونه از کلاس Shared Object توسط استفاده از متد getLocal.
  2. قرار دادن داده ها درون نمونه ساخته شده از Shared Object.
  3. ذخیره و نوشتن داده های درون حافظه فلش پلیر مربوطه به Shared Object توسط متد flush()

مرحله اول را در ابتدا هم توضیح دادیم که در آن کافی است یک متغیر ایجاد کنید و توسط متد getLocl و شناسه اختیاری برای ذخیره و بازیابی تعیین نماییم :


var mySharedObject:SharedObject = SharedObject.getLocal("iflashlord.com");

در مرحله بعد نام متغیر را نوشته (در این نمونه mySharedObject می باشد) و بعد از آن توسط (.)  و data و نام خصوصیت که می خواهیم برای آن مقدار تعیین کنیم را وارد می کنیم و بعد به آن توسط عملکر (=) مقدار را نسبت می دهیم ، در ادامه مثالی برای ذخیره نام و نام خانوادگی را مشاهده می کنید.


var mySharedObject:SharedObject = SharedObject.getLocal("iflashlord.com");
 mySharedObject.data.firstName = "Behrouz";
 mySharedObject.data.lastName = "Pooladrag";

در این مرحله اطلاعات پیوست شده اند  برای ذخیره نهایی آنها در حافظه فلش پلیر کافیست از متد flush استفاده کنید :

var mySharedObject:SharedObject = SharedObject.getLocal("iflashlord.com");
 mySharedObject.data.firstName = "Behrouz";
 mySharedObject.data.lastName = "Pooladrag";
 mySharedObject.flush();

در این مرحله اطلاعات درون حافظه ذخیره شده اند و قابل بازیابی هستند.

بازیابی و دریافت اطلاعات ذخیره شده در SharedObjects

بازیابی اطلاعات قرار داده شده در Shared Object به روش ثبت داده های شبیه می باشد ، این کار تنها دو مرحله دارد ، مرحله اول دسترسی به Shared Object توسط متد getLocal و مرحله بعد استفاده از data و نام خصوصیت ذخیره شده و استفاده از (.) در بین آنها ، در واقع می بایست مانند Object ها به خصوصیت های شی Shared Object دسترسی داشته باشید ، به این صورت که همه خصوصیت های در شی data ذخیره می شود.

این مرحله مانند مرحله ذخیره اطلاعات در Shared Object می باشد و درصورتی که از قبل داده ای ایجاد شده باشد آن را دریافت و درون متغیر ما قرار می دهد و در غیر این صورت data خالی از اطلاعات خواهد بود :

var mySharedObject:SharedObject = SharedObject.getLocal("iflashlord.com");

برای دریافت اطلاعات Shared Object با استفاده .data به شی خصوصیت های ذخیره شده دسترسی پیدا می کنید و مثلا برای دریافت مقداری که در متغیر firstName ذخیره کرده اید می بایست mySharedObject.data.firstName را استفاده کنید :

var mySharedObject:SharedObject = SharedObject.getLocal("iflashlord.com");
trace(mySharedObject.data.firstName);
trace(mySharedObject.data.lastName);

برای تست می توانید از همین کد استفاده کنید و نتیجه تست را در پنجره output فلش مشاهده کنید.

حذف اطلاعات ذخیره شده در SharedObjects

اگر لازم داشتید که همه اطلاعات موجود در شی اشتراکی خود را حذف کنید ، می توانید به راحتی با استفاده از متد clear() این کار را انحام دهید :

var mySharedObject:SharedObject = SharedObject.getLocal("iflashlord.com");
mySharedObject.clear();

نمونه آموزشی

در اینجا نمونه ای که در ابتدا آموزش دیدید را با هم آماده می کنیم ، دو شی در صفحه ایجاد می شود در زمان حرکت دادن و دقیق تر در زمان درگ شدن و رها شدن با رویداد  MOUSE_UP اطلاعات محل قرار گیری شی را در حافظه اشتراکی ذخیره می کند ، سپس در هر بار اجرا اطلاعات حافظه اشتراکی برسی می شود در صورتی که شامل اطلاعات از پیش ذخیره شده ای باشد آن را به عنوان موقعیت قرار گیری شی مربوطه استفاده می کند.

دکمه ای هم برای حذف اطلاعات موجود در حافظه قرار دادیم تا بهتر بتوانید نمونه را برسی کرده و به عملکردهای SharedObject آشنا شوید.

برای این نمونه شما می بایست دو شی MovieClip در استیج ایجاد کنید و برای آنها نام های  color_mc و blackWhite_mc را قرار دهید و یک شی از نوع Button از بخش کامپوننت های فلش به استیج اضافه کرده و نام آن را clear_btn قرار دهید ، سپس کد زیر را در تایم لاین در فریم اولیه قرار دهید :


var mySO:SharedObject = SharedObject.getLocal("IFLashLord.com");

color_mc.x = mySO.data.c_x;
color_mc.y = mySO.data.c_y;

blackWhite_mc.x = mySO.data.bw_x;
blackWhite_mc.y = mySO.data.bw_y;

if (! mySO.data.bw_y)
{
	trace("No SharedObject Data!");

	color_mc.x = 150;
	color_mc.y = 100;

	blackWhite_mc.x = 300;
	blackWhite_mc.y = 100;
}

color_mc.addEventListener(MouseEvent.MOUSE_DOWN , onDown , false , 0 , true);
blackWhite_mc.addEventListener(MouseEvent.MOUSE_DOWN , onDown, false , 0 , true);

color_mc.addEventListener(MouseEvent.MOUSE_UP, onUPc , false , 0 , true);
blackWhite_mc.addEventListener(MouseEvent.MOUSE_UP, onUPbw , false , 0 , true);

clear_btn.addEventListener(MouseEvent.CLICK, clearSO , false , 0 , true);

color_mc.buttonMode = true;
blackWhite_mc.buttonMode = true;

function clearSO(event:MouseEvent):void
{
	mySO.clear();
}

function onDown(event:MouseEvent):void
{
	event.target.startDrag();
}

function onUPbw(event:MouseEvent):void
{
	blackWhite_mc.stopDrag();
	mySO.data.bw_x = blackWhite_mc.x;
	mySO.data.bw_y = blackWhite_mc.y;

	mySO.flush();
}

function onUPc(event:MouseEvent):void
{
	color_mc.stopDrag();

	mySO.data.c_x = color_mc.x;
	mySO.data.c_y = color_mc.y;

	mySO.flush();
}
Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

22 نظر

  1. سلام دوست عزیز
    من یه تشکر به شما بدهکارم بابت آخرین راهنمایی که به من کردین در انجام پروژه
    ( متشکرم )

    مطلبتون هم مثل همیشه عالی بود
    موفق باشی

  2. باسلام یرای دانلود نرم افزار ودیدن فیلم مشکل دارم

  3. سلام.دادش چطوری design by می زارید روی فلش ؟؟

  4. سلام
    وقت بخیر
    خواهشم اینه که بفرمائین چجوری می تونم classpath رو به صورت relative و نه absolute تنظیم کنم.

  5. سلام خسته نباشین
    من یه movieclip دارم توی stage
    به این movieclip یه instance name اختصاص دادم
    یه movieclip دیگه دارم که داخلش از فریم ۱ تا فریم ۲۵ یه انیمیت انجام میشه.
    چیزی که میخوام اینه که وقتی به فریم ۲۵ داخلmovieclip رسیدم عرض movieclip دیگه که بهش instance name دادم ۵۰۰ پیکسل بشه.
    چجوری می تونم این کار رو بکنم ؟
    البته نمی خوام متغیر رو به صورت استاتیک تعریف کنم؟ هر چند که وقتی به صورت استاتیک تعریف میکنم کار میکنه برام اما نمیتونم متد ها و پراپرتی های داخل کلاس رو ببینم . ممنون از راهنماییتون.

    • سلام
      شی دوم را هم درون کتابخانه با دادن نام تعریف کنید و بعد در زمان افزودن آن به استیج شی دوم را هم به شی اول توسط کد اضافه کنید به این صورت امکان دسترسی شما به شی فراهم خواهد شد ، در فریم آخر آن نیز یک رویداد dispatch کنید و بعد آن را توسط listener دریافت نمایید
      موفق و پیروز باشید

  6. واقعا متشکرم از متن هایی ک گذاشتین من واقغا خوشحال شدم که با وبسایت شما اشنا شدم این وبسایت رو ب دوستانم هم معرفی خوتهم کرد. واقعا عالی بود

  7. خسته نباشید.
    خیلی جالب و کاربردی بود

  8. سلام ….
    آرایه ها رو چطور میشه با sharedObject ذخیره کرد؟

  9. سلام
    من شیر آبجکت رو یه نمونه برای درگ کردن استفاده کردم و به خوبی هم کار کرد
    اما وقتی بردم تو اس دبلیو اف کیت و خروجی اگزه گرفتم ، دیگه شیر آبجکت کار نکرد.
    راه حلی برای این مشکل هست ؟
    ممنون

    • سلام

      در فلش پلیر آن برنامه ها به صورت پیش فرض اجازه ذخیره بسته است
      ولی آن برنامه ها فکر می کنم به شما دستوراتی را می دهد که می توانید در فایل کنار پروژه ذخیره سازی کنید
      می توانید مختصات را در یک فایل ذخیره کنید و از آنجا هم لود کنید

      موفق و پیروز باشید

  10. سلام آقای پولادرگ
    من یه چیزی ساختم مثل image gallery با این تفاوت که شما می تونید فایل خودتون رو با استفاده از کلاس FileRefrence و متد load عکس خودتون رو تو گالری آپلود کنید البته به صورت آفلاین
    ولی من میخوام وقتی عکسا رو توش آپلود کردم و فابل swf یا exe رو بستم دفعه بعد که برنامه رو وا میکنم عکسام روی یا اطلاعاتم ذخیره بشه یعنی یه دکمه ذخیره داشته باشه که وقتی روش میزنم عکسام ذخیره بشه که بتونم دفعه بعد عم ازش استفاده کنم
    میشه یه توضیحی بدبد که با کلاس shared object میشه چنین کاری کرد؟یا کلاس دیگه یا متد دیگه ای واسه اینکار وجود داره؟

    • سلام و عرض ادب

      اگر فقط در همان سیستم باشد shared object پاسخگوی نیاز شما خواهد بود، در ضمن فلش به جز به حالت مشابه fileRefence امکان ذخیره در فایل را ندارد، مگر این که از ادوبی ایر استفاده کنید و یا برنامه های جانبی برای تبدیل فلش به exe با خصوصیت ها و دسترسی ها جدید…

      برای همان مورد هم می توانید آدرس ها دریافت شده از file refrence را ذخیره و در نمایش های بعدی بازیابی کنید، الگوی همین مطلب می تواند به شما در این امر کمک نماید
      موفق و پیروز باشید

  11. سلام و عرض ادب استاد عزیز
    میخواستم بدونم اگه ما بخوایم یک برنامه ای درست کنیم که در صفحه ی اول اون کاربر نام کاربری و گذرواژه خودش رو وارد کنه و وارد برنامه بشه چه روشی بهتره؟
    البته اینی که میگم میخوام لوکال باشه یعنی نمیخوام از پایگاه داده اطلاعات رو چک کنم
    مثلا یه رشته رو وارد کنه و بعد اونو با با همین کلاس سیو کنیم تا در موارد بعدی ازش استفاده شه
    در کل منظورم اینه برای همچین چیزی به صورت لوکال بهترین کلاس برای سیو پسورد همین کلاس هست؟یا کلاس های دیگه هم هست که برای سیو داده های حرفه ای تر استفاده میشه؟

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه