Contacts
صفحه اصلی پورتال | صفحه اصلی تالار | ثبت نام | اعضاء | گروه ها | جستجو | پرسش و پاسخ | فروشگاه الکترونیکی | خرید پستی بازی های کامپیوتری





صفحه اول انجمنها -> اصول اولیه در طراحی بازیهای کامپیوتری -> مقاله : تشخیص برخورد اشیاء در بازی و مشکلات آن
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي

نظر خود را در مورد مفید بودن این مقاله بیان کنید
چیز جدیدی یاد نگرفتم
40%
 40%  [ 2 ]
بد نبود
20%
 20%  [ 1 ]
خیلی به دردم خورد
40%
 40%  [ 2 ]
مجموع آراء : 5

مقاله : تشخیص برخورد اشیاء در باز
نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


4 شنبه 22 فروردين 1386 - 13:07
پاسخ بصورت نقل قول
هدف اصلی این مقاله تبیین نیاز یک بازی به یک الگوریتم تشخیص برخورد و بررسی سایر عوامل موثر در تشخیص برخورد در بازی است. امیدوارم که برای شما مفید باشد.

در تقریبا همه بازیها یکی از ارکان اصلی بازی برخورد اشیاء و واکنش بازی به این برخوردها است.
بنابراین تشخیص برخورد از اهمیت ویژه ای برخوردار است. در بازیهای مختلف به دقتهای متفاوتی در تشخیص برخورد نیاز است. واضح است که دقت بیشتر در تشخیص برخورد مستلزم پرداخت هزینه بالاتری نیز خواهد بود.

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

2. فاصله مکانی تشخیص برخورد یا همان دقت در حرکت دادن اشیاء در محیط بازی :
فرض کنیم دقیقترین الگوریتمهای تشخیص برخورد قابلیت این را دارند که تا صد در صد برخوردها را تشخیص دهند. اما این موتور بازی یه حلقه اصلی بازی است که این الگوریتمها را فراخوانی می کند.
همانطور که در مقاله حلقه اصلی بازی مشاهده نمودید در یک بازی ساده متور ابتدا موقعیت اشیاء را در محیط بازی محاسبه می نماید، و پس از آن آنها را در اختیار برنامه تشخیص برخورد قرار می دهد.
بنابراین اگر موتوری در حین حرکت دادن اشیاء دقت کافی را ننماید و یا به دلیل بالا بردن performance بازی حاصل، تشخیص برخورد را هر چند فریم یکبار انجام دهد(که به نظر من استفاده از چنین تکنیکی بعید است)، یعنی از تمام قابلیتهای الگوریتم تشخیص برخورد استفاده نکرده است و درصد تشخیص برخورد ها را به میزانی کمتر از صد تنزل داده است.

البته الگوریتمهایی نیز وجود دارند که به نحوی عمل مینمایند که خود را از این قائده مستثنا میکنند.
http://www.persian-designers.com/forum/viewtopic.php?p=24300#24300

برای روشن تر شدن مطلب به مثال زیر توجه کنید :

در تصویر زیر دو حشره دیده می شود. حشره سمت راست ثابت است و حشره سمت چپ به طرف حشره سمت راست با سرعت ثابت در حال حرکت است. می خواهیم ببینیم که یک موتور غیر دقیق چگونه ممکن است که با وجود بهره گیری از یک الگوریتم تشخیص برخورد کارا امکان تشخیص برخورد صحیح دو حشره را از دست بدهد.



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

تصاویر زیر هر کدام زمان فراخوانی برنامه تشخیص برخورد توسط موتور بازی را نشان می دهند.

فریم بعدی با حرکت آهسته حشره :



برخورد تشخیص داده می شود.

فریم بعدی با حرکت سریعتر حشره :



باز هم برخورد تشخیص داده میشود ولی کمی دیر

فریم بعدی با حرکت بسیار سریع حشره :



هیچ برخوردی تشخیص داده نمی شود. در حالی که بازیکن انتظار ندارد که کرم چپ از وسط کرم راست عبور کند.

می بینید که در این تصویر با وجود لزوم تشخیص برخورد، موتور بازی از تشخیص آن عاجز خواهد بود.

این اتفاق به طرز مشابه زمانی که متور بازی هر چند فریم یک بار از برنامه تشخیص برخورد استفاده نماید نیز خواهد افتاد.

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

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

صحنه اول : حشره چپ به نزدیکی حشره سمت راستی رسیده است. موتور برنامه تشخیص برخورد را فراخوانی میکند و نتیجه منفی است.



صحنه دوم : حشره چپ با حشره راست برخورد کرده ولی موتور از برنامه تشخیص برخورد استفاده نمیکند.



صحنه سوم : حشره چپ در حال عبور از وسط شکم حشره سمت راست است!!! و موتور برنامه تشخیص برخورد را صدا نمی زند.



صحنه آخر : کار از کار گذشته و موتور، الان برنامه تشخیص برخورد را فراخوانی میکند. Smile



منابع :
اطلاعات شخصی

سطح مقاله : مبتدی

نوسنده : احسان طاهری
پست الکترونیک : eh_taheri@yahoo.com

*** کلیه حقوق مطالب این پست برای نویستده و سایت طراحان ایرانی محفوظ است و استفاده از آن با ذکر منبع بلا مانع است.***

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید



اين نامه توسط eta در 5 شنبه 23 فروردين 1386 - 13:43 ويرايش شده است.
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
iran_adventure
مدیر انجمن
مدیر انجمن


تاريخ عضويت: شنبه 4 آذر 1385
تعداد ارسالها: 2069
محل سكونت: تهران


4 شنبه 22 فروردين 1386 - 23:44
پاسخ بصورت نقل قول
ممنون .
من توي Torque Game Builder يه تست كردم . يه مربع كه به سمت مستطيل مي ره و براي ايونت برخوردشون سرعت مربع رو صفر كردم .
نتايج به اين صورت بود :
تا سرعت 4000 پيكسل در ثانيه تقريبا درست كار مي كرد .
از سرعت بين 4000 تا 100000000000000 پيكسل ! در ثانيه خطا داشت ولي نتيجه جالب اين بود كه مربع قبل از مستطيل متوقف مي شد !
يعني تو حدود 50 بار تستي كه من كردم تو سرعت هاي بالا و پايين هيچ وقت نشد كه قسمتي از مربع روي مسطيل بيافته ...
دليل اتفاق بالا رو نمي دونم ولي نتيجه اي كه گرفتم اين بود كه حداقل در موتور TGB مشكل تشخيص برخورد وجود نداره يعني تا سرعت 4000 پيكسل در ثانيه درست كار مي كنه كه در هيچ بازي اي آبجكتي با اين سرعت نداريم ...
http://gamer2006.persiangig.com/C.JPG

_________________
Make something happen
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
مصطفي سپهريان
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: جمعه 24 آذر 1385
تعداد ارسالها: 1147
محل سكونت: تو يه فلش مموري دو گيگ


5 شنبه 23 فروردين 1386 - 05:31
پاسخ بصورت نقل قول
ايولا آقا احسان Very Happy
گقفتم كه بفهمي بينندگانت دو نفر هستن Surprised

_________________
«پشتکار»«پشتکار»«پشتکار»
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
Ali
مدیر کل
مدیر کل


تاريخ عضويت: شنبه 20 تير 1383
تعداد ارسالها: 2983
محل سكونت: On the edge


5 شنبه 23 فروردين 1386 - 11:40
پاسخ بصورت نقل قول
نقل قول:

2. فاصله مکانی تشخیص برخورد یا همان دقت در حرکت دادن اشیاء در محیط بازی :
فرض کنیم دقیقترین الگوریتمهای تشخیص برخورد قابلیت این را دارند که تا صد در صد برخوردها را تشخیص دهند. اما این موتور بازی یه حلقه اصلی بازی است که این الگوریتمها را فراخوانی می کند.
همانطور که در مقاله حلقه اصلی بازی مشاهده نمودید در یک بازی ساده متور ابتدا موقعیت اشیاء را در محیط بازی محاسبه می نماید، و پس از آن آنها را در اختیار برنامه تشخیص برخورد قرار می دهد.
بنابراین اگر موتوری در حین حرکت دادن اشیاء دقت کافی را ننماید و یا به دلیل بالا بردن performance بازی حاصل، تشخیص برخورد را هر چند فریم یکبار انجام دهد(که به نظر من استفاده از چنین تکنیکی بعید است)، یعنی از تمام قابلیتهای الگوریتم تشخیص برخورد استفاده نکرده است و درصد تشخیص برخورد ها را به میزانی کمتر از صد تنزل داده است.


مشکل اینجاست که تو منطق کامیپوتر چیزی به اسم پیوستگی وجود نداره. همه چی گسسته و دیجیتال هست و تمام محاسبات هم رو هم اصل شکل می گیرن. تشخیص برخورد هم بستگی به الگوریتم مورد استفاده داره. یعنی ممکنه تو یه موتور چیزی که شما می گین درست باشه، یعنی تشخیص برخورد بر اساس موقعیت یک شیء در هر فریم چک بشه که خب این مشکلات رو بوجود میاره. یعنی فاصله گسستگی در سرعت های بالا ( سرعت اجرای بازی، یا سرعت حرکت شیء) زیاد میشه و دقت میاد پایین. ولی این موضوع حالت عمومی نداره و در خیلی از موتورها صادق نیست. چرا که در اغلب موتورهایی که من دیدم مخصوصا 3 بعدی هاش، از الگوریتم های ray intersection استفاده میشه. یعنی یه شیء قبل از حرکت اطراف خودش رو با پخش یک یا چند شعاع نوری چک میکنه و محاسبات بر مبنای برخورد داشتن/نداشتن شعاع های نوری با سایر اشیای محیط انجام می گیره.


در کل مقاله خوبی هست و دید خوبی به خواننده میده.
علی

_________________
پی سی گیمرز - آرشيو بزرگ بازی های کامپیوتری
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


5 شنبه 23 فروردين 1386 - 13:00
پاسخ بصورت نقل قول
برای مصطفی :
مرسی خوشحال شدم.
اما ببین مجتبی چقدر فعالتره Smile

برای مجتبی :
خوب تو اول گفتی سرعت مربع رو صفر کردم بعد گفتی مربع اول می ایستاد؟؟؟؟ Neutral

برای علی :
خیلی ممنون. این رو نمی دونستم. آخه تو مسائل بازی سه بعدی کم اطلاعم اگر چه بعد از تشخیص برخورد دو بعدی فکر میکنم یه مقاله برخورد سه بعدی هم بدم.(که باید برم براش تحقیقات انجام بدم). اگه شما زحمتش رو بکشید که خیلی خوبه(چون که اطلاعاتتون کاملتره)
بگذریم تو پست اول یه لینک به پست شما میزنم تا موارد استثنا رو مشخص کنم.
بازم ممنون

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
iran_adventure
مدیر انجمن
مدیر انجمن


تاريخ عضويت: شنبه 4 آذر 1385
تعداد ارسالها: 2069
محل سكونت: تهران


5 شنبه 23 فروردين 1386 - 13:30
پاسخ بصورت نقل قول
فكر كنم متوجه جملم نشدي
تو ايونت برخوردشون گفتم كه سرعت مربع صفر بشه يعني هر وقت برخوردي بوجود بياد مربع مي ايستد اين جوري مي شه فهميد چه موقع برخورد رو تشخيص داده به قول خودت چه موقع الگوريتم تشخيص برخورد برخورد رو تشخيص داده

_________________
Make something happen
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 1 از 1 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |