درود مهمان گرامی! ثبت نام

جشنواره بازیسازی پرومیکرز

امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
12 راه برای بهینه سازی بازی
#1
Star 
ببخشید که مقاله به زبان فارسی نیست.
اگه کسی هست که میتونه این مقاله رو فارسی کنه و بزاره توی همین تاپیک خیلی ممنون میشم. smiley

نقل قول: 1. Deactivate/Destroy Unused Instances

Object instances slow down Game Maker a LOT. I've heard that ~50 instances is the most that you should have awake at once. And the more work an object is doing each step, the slower it will be, so take care to make sure nothing is awake if it's not needed.

To that effect, instance_destroy() and instance_deactivate() are your friends. Try deactivating anything that's outside of the player's view, and destroy anything that's outside of the room.

For example, put this in the Step Event of an invisible object that sits in each level:

کد php:
instance_deactivate_region(view_xview[0], view_wview[0], view_hview[0], falsetrue);
instance_activate_region(view_xview[0], view_yview[0], view_wview[0], view_hview[0], true); 
Make sure you don't deactivate important objects (like the object calling the code!). If you set the argument "notme" to true, the object will ignore itself in the deactivation.

2. Use Tiles Instead of Objects

Tiles are much, MUCH faster than objects, so you should use them in place of objects whenever you can. You can actually do a lot of things with tiles, like create and destroy them, set their depth, get their position, etc. They're not completely static.

Background details that you don't actually interact with are perfect tile material.

3. Do Fewer Collision Checks

Objects that have collision events are much slower than objects that don't. So place those events in the objects which will have the fewest instances. A good example is the player versus the 100 bullets. You obviously have to do a collision check between the two objects... make sure that event goes in the player object instead of the bullet.

Collision functions (and trig calculations) in general are pretty heavy, so it's a good idea to have as few of them as possible. Make sure you're not doing the same collision check more than once in a single step. If you need to look up the return value of any slow function more than once, consider putting the value of the collision in a variable and check the variable instead.

Whenever possible, turn off "Precise collision checking," which is a per-pixel collision detection method.

4. Optimize Your Use of Step Events

Step Events are, of course, called every step... so the more you do in the Step Event, the slower your game will be. Whenever possible, reduce the size of your Step Events, and also the number. If you don't have to do it every step, then don't!

One alternative is to use Alarms.

5. Do Less Drawing

The less drawing you do, the better. Optimize your drawing routines.

نقل قول: Quote from: Game Maker Manual
If you have a covering background, make sure you switch off the use of a background color.
نقل قول: Quote from: Game Maker Manual
Also be careful with the use of many views. For each view the room is redrawn.
6. Sample Down Your Sound/Music

Sound can take up a lot of memory and space, especially wavs and mp3s, so sample them down if you can. Ask yourself if the higher bitrate or extra channel is worth the hit!

Keep in mind that Game Maker doesn't support mods or oggs, and it barely supports mp3s, so consider using a library like supersound.dll for your sound needs.

7. Crop Your Sprites
نقل قول: Quote from: Game Maker Manual
First of all, look carefully at the sprites and backgrounds you use. Animated sprites take a lot of memory and drawing lots of sprites takes a lot of time. So make your sprites as small as possible. Remove any invisible area around it (the command crop in the sprite editor does that automatically). The same applies to background images.
--- Newly Added ---

8. Turn Off Synchronization

Under "Global Game Settings -> resolution" there is an option "Use synchronization to avoid tearing"... make sure it is unchecked! Not only does it do very little to help with tearing problems, it can also drastically reduce your game's speed. I had it checked accidentally and it increased my CPU usage about 10-20% (from about 20-30% to 40-50%).

9. Use Smaller Screen Resolutions

نقل قول: Quote from: rinkuhero
640x480 is fine for most games. I kind of regret making [Immortal Defense] 1024x768 -- it looks nice, but just the fill rate makes it much slower. Use dedicated resolutions, they work faster than windowed and much, much faster than stretched.

10. Use Bigger Tiles, Rather than More Tiles

While tiles are lighter than objects, having a lot of them will still cause slowdown. If you can use a handful of large tiles rather than a lot of little ones, do so.

11. Draw Primitives to a Surface First

Regarding functions like draw_circle, draw_rectangle, or draw_line: first draw the primitive to a surface, then draw the surface to the screen. It's much faster that way.

12. Don't Use execute_string()

It's really slow.

منبع
پاسخ
 سپاس شده توسط Pooya ، bazebaz ، armin ، amir.k ، bagher2g ، ladyship ، mobailshiaomi
#2
ممنون مقاله خوبی بود ولی من با بعضی جاهاش مخالفم یعنی سخته انجام دادنش.c;,g
در ضمن من فکر کردم مقاله کلیه ...teeth
فک نکن که smiley فقط یه لبخند سادس, کلی حــــــرف توشه
فصل اول ترجمه ی کتاب آموزش B4A آماده شد!
مراحل پیشنهادی تشکیل تیم بازیسازی

تاریخ را بــــــــازی کنید.........به زودی
پاسخ
#3
(28/4/1391، 02:36 عصر)pooya نوشته است: ممنون مقاله خوبی بود ولی من با بعضی جاهاش مخالفم یعنی سخته انجام دادنش.c;,g
در ضمن من فکر کردم مقاله کلیه ...teeth
کجاش ؟!
یعنی چی فکر کردی کلیه ؟! teeth
پاسخ
#4
شماره یک.
منظورم از کلی این بود که برای همه ی موتور هاست.
فک نکن که smiley فقط یه لبخند سادس, کلی حــــــرف توشه
فصل اول ترجمه ی کتاب آموزش B4A آماده شد!
مراحل پیشنهادی تشکیل تیم بازیسازی

تاریخ را بــــــــازی کنید.........به زودی
پاسخ
#5
(28/4/1391، 03:08 عصر)pooya نوشته است: شماره یک.
منظورم از کلی این بود که برای همه ی موتور هاست.

این یه سورس برای شماره 1 هست : دانلود
سازنده : dll1024
پاسخ
 سپاس شده توسط Pooya ، aminblog76
#6
من فشردش می کنم .
- غیر فعال کردن یا ازبین بردن ابجکت هایی که در دوربین نیستن و یا کارایی ای ندارن .
- استفاده از Tile به جای ابجکت ها در زمانی که فقط به نمایش یک تصویر نیاز داریم.
- بررسی کمتر برخورد ابجکت ها . این یکی خیلی مهمه رو افت فریم تاثیر داره .
برای برسی برخورد - برخورد ابجکت اول با تمامی ابجکت ها دونه دونه بررسی می شه . یعنی اگه یه پلیر داریم و 100 تا تیر درصحنه
بررسی برخورد پلیر با تیر تا 100 با انجام می شه . ممکنه همون اول برخورد کنه و خلاص . یا تا صد بره .
- از تابع بررسی برخورد چند بار استفاده نکنید . مقدار برگشتی رو در یک متغییر ذخیره کنید .
- هرچی ViewPort بیشتر داشته باشید پردازش هم بیشتر می شه !!
- دور اسپیرایت ها رو خالی نزارید . تصویر کوچک تر باشه بهتره دیگه !!
- از رزلوشن پایین استفاده کنید .
- از تابع execute_string() هم استفاده نکنید .
-----------------------------
من همه اینا رو رعایت می کردم !!
XEngine
پاسخ
 سپاس شده توسط Milad_Hyper ، armin ، Pooya ، aminblog76 ، Ahmad_ ، AIVIO ، sajjad3011 ، ladyship
#7
(28/4/1391، 03:15 عصر)bazebaz نوشته است: من فشردش می کنم .
- غیر فعال کردن یا ازبین بردن ابجکت هایی که در دوربین نیستن و یا کارایی ای ندارن .
- استفاده از Tile به جای ابجکت ها در زمانی که فقط به نمایش یک تصویر نیاز داریم.
- بررسی کمتر برخورد ابجکت ها . این یکی خیلی مهمه رو افت فریم تاثیر داره .
برای برسی برخورد - برخورد ابجکت اول با تمامی ابجکت ها دونه دونه بررسی می شه . یعنی اگه یه پلیر داریم و 100 تا تیر درصحنه
بررسی برخورد پلیر با تیر تا 100 با انجام می شه . ممکنه همون اول برخورد کنه و خلاص . یا تا صد بره .
- از تابع بررسی برخورد چند بار استفاده نکنید . مقدار برگشتی رو در یک متغییر ذخیره کنید .
- هرچی ViewPort بیشتر داشته باشید پردازش هم بیشتر می شه !!
- دور اسپیرایت ها رو خالی نزارید . تصویر کوچک تر باشه بهتره دیگه !!
- از رزلوشن پایین استفاده کنید .
- از تابع execute_string() هم استفاده نکنید .
-----------------------------
من همه اینا رو رعایت می کردم !!
ممنون خیلی عالی خلاصه کردی . smiley
پاسخ
 سپاس شده توسط bazebaz ، Pooya ، aminblog76
#8
خیلی کتابی توضیح دادی
تقریبا نصفش رو نفمیدم straight
1 رو فهمیدم
2 رم فهمیدم ولی اگه از تیل استفاده کنیم بعضی وقتا گیم میکر قاتی پاتی میکنه تیل هارو
3 اینو نفهمیدم خو یه ایونته دیگه هی برسی میشه
4 رو هم اصلا نفمیدم
5-ویو پورت یعنی همون ویو؟ straight مثلا دو تا ویو مختلف توی یه صفحه؟
6 رو هم فهمیدم
7 مگه رزولیشن رو پایینم میشه اورد؟
8-این تابع چی هست؟what
ببخشید مطلب قدیمی بالا اوردم ولی مجبور بودم
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
پاسخ
#9
اره رزولیشن رو میشه دستکاری کرد ولی بیشتر به درد کامپیوتر میخوره اونم وقتی توی حالت فول اسکرین نباشی
اگه فول اسکرین باشه و رزولیشن رو عوض کنی کیفیت عوض میشه و اگه فول اسکرین نباشی سایز هم باهاش عوض میشه
عبادت به زیادی نماز و روزه نیست ، همانا به زیاد اندیشیدن در کار خداست ... امام رضا (ع)
آموزش های درخواستی گیم میکر
پاسخ
#10
کد غیر فعال کردن ابجکتای خارج از روم کلی باگ بوجود میاره برای مثال میتونید قسمت داستانی ساعت زامبیو ببینید که پر از باگه مخصوصا انیمیشن عنکبوت ها با تیر های مسلسل که وقتی از ویو میرن بیرون غیر فعال میشن همونجا میموننstraight
نگید که توی فلان ایونت کد فلان رو بزار اون ابجکتو فعال کنه چون کار نمیکنه
باید یه کاری کنم که اون کد یه سریا ابجکتارو به غیر از چند تا ابجکت دیگه غیر فعال کنه
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  پیاده سازی پرش بالا و چپ و راست در اندروید sajjad3011 10 3,340 11/3/1395، 09:30 صبح
آخرین ارسال: امیر صفری
  آموزش ساخت یک بازی خیلی ساده با گیم میکر برای مبتدی ها (با کد نویسی) hormoz 10 6,504 26/10/1393، 05:50 عصر
آخرین ارسال: gamevar
NewText اموزش قرار دادن رمز برای بازی bagher2g 16 4,451 12/11/1392، 08:58 عصر
آخرین ارسال: رحیمی
  آموزش ساخت یک بازی خیلی ساده با گیم میکر برای مبتدی ها (با کد نویسی) بخش 2 hormoz 7 3,611 17/8/1392، 12:12 صبح
آخرین ارسال: sepehr 2
  بهینه سازی اسپرایت در گیم میکر bagher2g 8 1,824 21/1/1392، 02:22 عصر
آخرین ارسال: محمد هکر



کاربرانِ درحال بازدید از این موضوع: 1 مهمان