کانستراکت2

کانستراکت2 به شما اجازه می‌دهد بازی‌هایی حرفه‌ای بسازید.

اسلایدر

کانستراکت2

کانستراکت2 به شما اجازه می‌دهد بازی‌هایی حرفه‌ای بسازید.

کانستراکت2

یک وبلاگ خوب و مفید برای یادگیری موتور بازی سازی کانستراکت2 که دسترسی به ترجمه های سایت سازنده کانستراکت2 , آموزش های تصویری فارسی , گرافیک های آماده و... را به شما میدهد.
لیست تغییرات جدید وبلاگ را می توانید از قسمت امکانات وبلاگ مشاهده نمایید که هدفمان بهتر شدن وبلاگ در جهت یپشرفت شما دوستان است.
وبلاگ ما یکی از حمایت کنندگان محک است که از درآمدی که از فروش ها بدست میاورد را به کودکان سرطانی میپردازد تا هم کاربران و هم ما در یک کار نیک سهیم باشیم!

پنل کاربردی
حق کپی و رایت



طبق ماده (12) قانون جرايم رايانه اي: هرکس به طور غیرمجاز داده ای متعلق به دیگری را برباید، چنانچه عین داده‌ ها در اختیار صاحب آن باشد، به جزای نقدی از یک تا بیست میلیون ریال و در غیر این صورت به حبس از نود و یک روز تا یک سال یا جزای نقدی از پنج تا بیست میلیون ریال یا هر دو مجازات محکوم خواهد شد.

دوستان یکی از اصول اصلی و پایه ساختن هر بازی داشتن یک منبع برای ذخیره کردن اطلاعات درون بازی است که همانطور که شاهد هستید کمتر بازی پیدا می شود که از ذخیره کردن درون بازی استفاده نکرده باشد حالا امروز می خواهیم شما را با روش های ذخیره کردن بازی در کانستراکت2 آشنا کنیم.

  • استفاده از شئ سیستم (Save & Load)
  • استفاده از شئ وب استوریج (Web storage)
  • استفاده از شئ لوکال استوریج (Local storage)

فعلا در حال حاضر این سه روش برای ذخیره کردن بازی وجود دارد اما اینکه از کدام برای ذخیره سازی در بازی استفاده کنیم؟

  1. استفاده از ذخیره سازی شئ سیستم مزایا و معایبی دارد و در همه بازی ها نمی توان ازش به عنوان ذخیره بازی استفاده کرد که در ادامه به آن ها اشاره خواهیم کرد.

s

 

همانطور که مشاهده می کنید در اکشن های شئ سیستم چنین گزینه هایی وجود دارد که روش ذخیره کردن را برای شما را بسیار آسان کرده است. برای ذخیره سازی بازی از Save و برای بارگزاری از Load استفاده می کنیم.

 

Untitled-2

 

همانطور که می بینید در اونت 1, پس از کلیک شدن بر روی دکمه save, بازی ما را همان لحظه در شناسه دلخواه “save_car” ذخیره می کند (مانند متغیر ها و مکان های اسپریت و …) و حالا برای خواندن ذخیره ها از اکشن Load استفاده می کنیم که باید همان شناسه ای(“save_car”) که داده بودیم را برای این اکشن نیز بدیم حالا اگر بازی را تست کنید و دکمه save را بزنیم بازی ذخیره می شود و اگر دکمه Load را بزنیم بازی ما به آخرین ذخیره بارگزاری می شود.

آیا حتما باید از دکمه Save & Load برای بارگزاری و ذخیره استفاده کنیم؟

خیر, شما می توانید با هر اونتی که نیاز دارید بازی را ذخیره کنید مثلا بجای دکمه Load می توانید از اونت On start of layout استفاده کنید و بجای دکمه save نیز از اونت on end of layout استفاده کنید که در شروع لیوت خودکار آخرین ذخیره را بارگزاری کند و پس از خارج شدن از لیوت بازی را ذخیره کند:

 

es

 

یا اصلا می توانید از اونت های On collision استفاده کنید که در صورت برخورد اسپریت ها به هم بازی ذخیره شود و اینکه از کدام استفاده کنیم اختیار با شماست و می توانید از اونت های دیگری نیز استفاده کنید.

در بعضی از بازی ها بخصوص سبک استراتژیکی , کاربر اسم ذخیره بازی خود را می نویسد و دفعه بعد با همان اسم به همان ذخیره قبلی خود ادامه میدهد مثل بازی قلعه که شما می خواهید بازی را ذخیره کنید یک اسم براش انتخاب می کنید; اما برای اینکار باید از این روش استفاده کنید که موقعی که کاربر میخواد بازی را ذخیره کند یک تکس باکس باز می شود و کاربر اسم ذخیره را می نویسد و دوباره که خواست همان ذخیره قبلی را بارگزاری کند همان اسمی که برای ذخیره نوشته بود را وارد می کند و بازی به حالت قبلی لود می شود به مثال زیر نگاه کنید:

 

sd

 

اما در چه بازی هایی از این ذخیره سازی استفاده کنیم؟

این روش برای بازی های استراتژیکی و بازی های سبک کارتی یا بازی های پلتفرمی و یا بازی هایی که مرحله ها طولانی هست استفاده می شود اما برای بازی هایی مثل رکوردی و … که هر دفعه از دوباره لیوت آغاز می شود مناسب نیست و باید از روش های بعدی استفاده کنید. (پایان روش اول)

 

 

2:استفاده از شئ وب استوریج برای ذخیره دائمی و موقت متغیر ها که اگر از نسخه کانستراکت r204 استفاده می کنید در حالت عادی مخفی شده در صفحه شئ ها نیست ولی برای اینکه ظاهر بشه باید بر روی صفحه شئ ها راست کلیک کنید و تیک گزینه Show deprecated plugins را بزنید تا ظاهر شود:

 

12

 

قبل از شروع آموزش  شما را با اونت ها و اشکن های موجود در پلاگین آشنا می کنیم:

  • اونت های موجود در پلاگین وب استورچ:

we

دو نوع برای ذخیره کردن وجود دارد یکی دائمی (Local) و دیگری موقت (Session) که برای یه مدت محدود مقدار را ذخیره می کند اما گزینه های موجود:

  • Compare key value: یک اونت شرطی است که مقدار درون key شما را برسی می کند و اگر شرط برقرار باشد اکشن ها رخ میدهد و دو نوع هم داریم متغیر های عدد (as number) و متغیر های نوشتاری(as text).
  • local key exists: برای پیدا کردن key یا بهتره بگیم برسی وجود key که معمولا به اونت های شروع لیوت پیوست می خوره و برسی را انجام میده و وقتی گزینه را انتخاب می کنید مانند تصویر زیر یک key از شما می خواهد که باید برای هر متغیر که می خواهید در بازی ذخیره کنید یک key تعریف کنید.(key ها مثل اسمی برای ذخیره کردن مقدار متغیر هست که به صورت دلخواه می توانید وارد کنید ولی هر key یک اسم متفاوت).
  • Session Key exists:دقیقا مثل بالایی هست با این تفاوت که بالایی دائمی ذخیره می کند ولی این گزینه بصورت موقت ذخیره سازی می کند.(کاربرد بسیار کمی دارد).

به طور مثال : “key=”save_scores

اکشن های موجود در پلاگین وب استورچ:

wes_ac

  • Clear local storage: پاک کردن مقدار key های دائمی.
  • Remove local value:حذف یک مقدار key از مقدار های دائمی.
  • set local value:گرفتن مقدار متغیر و ذخیره کردن در key بصورت دائمی (همون نقش save را داره فقط اسمش فرق کرده و باید key و متغیری که قراره ذخیرش کنیم را بهش بدیم)

نکته: پایینی ها هم مثل بالایی ها هستند با این فرق که اگر از ذخیره کردن موقت استفاده کردین باید از اکشن هایی پایینی استفاده کنید.

اما چطور ازش استفاده کنیم؟

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

روش ذخیره کردن به این صورت هست که باید برای هر یه متغیر یک key تعریف کنیم و در شروع بازی اگر چنین key هایی در بازی وجود داشت مقدار متغیر ما را به مقدار ذخیره شده در key برگردونه:

 

Untitled-2

 

همانطور که مشاهده می کنید یک متیغر به اسم “Score” داریم و می خواهیم مقدارش را ذخیره کنیم در اونت 1 در تصویر , گفتیم که در شروع بازی و یک شرط دیگه هم بهش اضافه کردیم که اگر “save_scores” وجود داشت مقدار متغیر ما به (save_scores) تغییر کنه تقریبا کارش مثل Load کردن هست منتها فقط برای یک مقدار و در نهایت در اونت 2 تصویر , گفتیم که اگر روی دکمه ای کلیک شد مقدار متغیر را ذخیره کنه.(set local key) که در اولی باید اسم key را وارد کنید و در دومی باید متغیر را انتخاب کنید. حالا اگر متغیر مقدارش که الان 0 است در بازی تغییر کند مثلا بشه 87 و دکمه را بزنیم مقدار ذخیره می شود و دوباره وارد بازی بشین مقدار همان 87 است.

حالا اگر 10 تا متغیر داشتیم چکار کنیم؟

مثلا اگر 10 تا متغیر داشته باشیم باید برای هر 10 تا هم جداگانه key بسازیم مثل تصویر زیر:

 

1

 

الان یکی متغیر Score است و دیگری متغیر Name است اما فقط مقدار متغیر ها را ذخیره نمی کنه بلکه حتی مقدار Text و  Textbox نیز می تواند ذخیره کند که در تصویر بالا می بینید و اینکه از چه اونتی برای ذخیره کردن و بارگزاری استفاده کنیم نیز مثل روش اول در دست شماست و کاربرد این نوع روش برای ذخیره حرفه ای بیشتر بازی ها بکار میره که فقط قصدشون ذخیره مقدار ها هست. (پایان روش دوم)

 

 

3: روش استفاده از شئ لوکال استوریج هست که همان نسخه بهبود یافته وب استوریج هست که دقیفا روش ذخیره سازیش برای مقدار بکار میرود و می توان گفت برادر دیگر وب استورچ ها هستند که در نسخه های جدید دیگر این روش ذخیره سازی جایگزین وب استورچ شده اند ولی با امکانات و مزایا بیشتر که در پایین به آن ها می پردازیم:

قبل از شروع آموزش شما را با اونت ها و اکشن های مهم موجود در پلاگین آشنا می کنیم:

Untitled-3

برخلاف وب استوریج که دو نوع روش ذخیره داشت لوکال استوریج فقط یک نوع دارد و همان دائمی است.

  • اونت های موجود در پلاگین وب استوریج:

  1. On item exists:این اونت برای چک کردن وجود آیتم است که از آن در ادامه توضیح خواهیم داد.
  2. On item get:این اونت برای دریافت مقدار آیتم بکار میرود که به زبان ساده تر نقش Load را ایفا می کند.
  3. On item set:برای ذخیره کردن مقدار آیتم استفاده می شود که نقش Save را نیز این انجام میدهد.
  4. On item removed: برای حذف کردن یک آیتم بکار میره.

ما با همین چند تا گزینه بیشتر سر و کار داریم بقیه هم خیلی ساده هستند و نیازی برای توضیح دادن اضافه نبود.

  • اکشن های موجود در پلاگین وب استورچ:

12

 

  1. Check item exist: این اکشن برای برسی وجود آیتم بکار میرود که بیشتر در شروع لیوت بکار میرود.
  2. Get item: تقریبا مثل گزینه local key exists وب استورچ هستند که فقط اسمش عوض شده و بجای key باید item را وارد کنیم.
  3. Remove item:برای حذف یک آیتم بکار میرود.
  4. Set item:همان نقش set local value وب استورچ را دارن فقط اسمش عوض شده و همان نقش Save را ایفا می کند.

بقیه نیز نیازی برای توضیح ندارد.

اما چطور ازش استفاده کنیم؟

دوستان این روش بسیار آسان هست فقط کمی اونت های بیشتری لازم دارد ما باید به این صورت عمل کنیم که در شروع لیوت On start of layout شئ لوکال استورچ ما یک آیتم را برسی کند Check item exist و در صورت وجود آیتم On item exists مقدار داخلش را دریافت می کند Get item و پس از دریافت آیتم On item get مقدار متغیر ما به Local storage.local value تغییر می کنه.

1:در شروع لیوت لوکال استورچ یه آیتم (اسم دلخواه برای ذخیره یک متغیر) را برسی می کنه.

 

1

 

2:حالا اگر آیتم برسی شد و چنین آیتمی وجود داشت خب حالا مقدار آیتم را دریافت می کنه.

 

2

 

3:حالا پس از اینکه مقدار آیتم را دریافت کرد خب وقتش رسیده مقدار متغیر ما نیز به مقدار درون آیتم تغییر کنه حالا تا اینجا عمل Load را انجام دادیم.

 

3

 

برای ذخیره کردن مقدار متغیر هم مثل زیر عمل می کنیم:

4:حالا اگر بر روی دکمه کلیک کنیم مقدار متغیر را به آیتم میفرسته و عمل save را انجام میده.

 

4

 

حالا از کدوم وب استورچ یا لوکال استورچ استفاده کنیم؟

(زحمت این قسمت ترجمه را آقا مجتبی کشیده و از ایشون تشکر می کنیم)

  • ذخیره‌سازی غیر همزمان: ذخیره‌سازی اطّلاعات در WebStorage به صورت همزمان بود، یعنی همان لحظه‌ای که اطّلاعات را ذخیره می‌کردید، ابتدا ذخیره‌سازی به طور کامل انجام می‌شد و بعد ادامه‌ی بازی انجام می‌شد، این مسئله برای ذخیره‌سازی مقادیر کوچک مشکل خاصّی ایجاد نمی‌کرد، ولی برای ذخیره‌سازی مقادیر خیلی بزرگ در هر بار ذخیره‌سازی چند لحظه هنگ می‌کرد. Local storage از ذخیره‌سازی غیر همزمان استفاده می‌کنه، یعنی موقع ذخیره‌سازی، بازی متوقّف نمی‌شه و ذخیره‌سازی به طور موازی با اجرای بازی انجام می‌شه و به همین دلیل عملکرد بازی رو خیلی بهتر می‌کنه. (Local storage برای ذخیره‌سازی از WebSQL و IndexedDB استفاده می‌کنه، اگه پلتفرم مورد نظر ما از این دو پشتیبانی نکنه، ذخیره‌سازی دوباره به صورت همزمان انجام می‌شه).
  •  
  • محدودیّت حجمی: در WebStorage محدودیت حجمی زیاد بود (حدّاکثر تا ۵ مگابایت می‌توانستیم ذخیره کنیم)، ولی چون Local storage از WebSQL و IndexedDB استفاده می‌کنه این محدودیت حجمی در بیشتر مواقع ۵۰ مگابایته و در بعضی جاها نامحدوده.
  •  نوع داده: Local storage نوع مقداری که در اون ذخیره می‌شه رو حفظ می‌کنه. WebStorage تمام مقادیر رو به عنوان رشته برمی‌گردوند، حتّی اگه ما در اون عدد ذخیره کرده بودیم، این موضوع موجب ایجاد باگ‌هایی در بازی می‌شد. Local storage عددها رو به عنوان عدد برمی‌گردونه و از بروز چنین مشکلاتی جلوگیری می‌کنه.
  • پشتیبانی Chrome web store: پشتیبانی از WebStorage در Chrome web store برداشته شد، و این یعنی اگه در بازی‌تون از این پلاگین استفاده کرده باشید و بخواین برای Chrome web store خروجی بگیرید نمی‌تونید اطّلاعاتی رو ذخیره کنید، ولی این مشکل با Local storage وجود نداره.
  • حذف Session storage: در WebStorage کلیدهای Session هیچ مزیّت خاصی نسبت به متغیّرهای گلوبال نداشتند، به همین دلیل در Local storage این کلیدها دیگر وجود ندارند.
  • اسم غلط انداز: اسم پلاگین WebStorage کمی غلط انداز بود، چون کاربران وقتی عبارت Web را در اسم این پلاگین می‌دیدند، فکر می‌کردند کار این پلاگین ذخیره‌ی اطّلاعات در وب است.

جنبه‌ی منفی Local storage این هست که کار با اون کمی مشکل‌تر شده. به خاطر این‌که ذخیره‌سازی اطّلاعات در Local storage غیر همزمان هست، نمی‌تونید خیلی راحت از یک اکسپرشن ساده برای دریافت مقدار استفاده کنید؛ ابتدا باید از اکشن get item استفاده کنید و لحظه‌ای بعد که مقدار مورد نظر دریافت شد از کاندیشن On item get استفاده کنید. به دلیل اینکه روش ذخیره‌سازی اطّلاعات در WebStorage با Local storage فرق می‌کنه، نمی‌تونید با استفاده از Local Storage به مقداری که قبلاً در WebStorage ذخیره کرده‌بودید دسترسی پیدا کنید حالا این شما هستید که از کدام روش استفاده کنید اختیار با شماست. (پایان آموزش سوم).

 

نظرات کاربران سیرا  (۵)

سلامدم میشه یه مثال بزنید خودتون؟
همین ذخیره با لوکال و بعد نشون دادن توی تکست.
ممنون میشم
پاسخ:
سلام
مثال گذاشتم داخل هر توضیح!
سلام.
من بعد از اینکه مقدار رو میگیرم با لوکال و ذخیره میکنم توی متغیر
توی تکست متغیر به جای اینکه مقدارش رو نشون بده این عبارت هست "NaN"
ممنون میشم بگید مشکل کجاست؟
پاسخ:
سلام
درست عمل نکردین!
آقا لینک پلاگینش رو میدین

پاسخ:
پلاگینهای مخصوص ذخیره بازی به طور پیش فرض در خود کانستراکت وجود دارند.
سلام ببخشید اگه از این روش وب استورچ یا لوکال استفاده کنیم بازی مون هک نمیشه
پاسخ:
سلام
تا جایی که اطلاع دارم خیر!
بسیار بسیار عالی
موفق باشید.
پاسخ:
ممنون قاسم جان.
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی