PDA

View Full Version : گفتگو: برای حرکت جدا گانه هر شی در برنامه از چه الگوریتمی باید استفاده کرد؟



returnx
پنج شنبه 01 مهر 1389, 22:01 عصر
ترم پیش که ما C++ داشتیم استادمون به پروژه چهار راه رو داده بود.
این پروژه به این صورته که با ید دو شی می ساختیم آدم و ماشین و این دو شی باید حرکت میکردند و اگه به هم رسیدن (حالت تصادف) تشخیص میدادند و وایمیستادند .
برنامه ای که من نوشتم این کارو انجام میداد اما مشکل ایجا بود که از هز شی فقط میشد یکی درست کرد .من این برنامه رو بردم و استاد گفت فقط 50% نمره رو میگیری ، با تلاش بسیار تونستم چند شی ای کنم اما برنامه خیلی مسخره شده بود به دلایلی ...
خلاصه من 70% نمره رو گرفتم .
اما سوال اینجاست که به طور مثال در بازی هایی مثل PES (فوتبال) چطوری هر شی حرکت خودشو میکنه؟
از چه الگوریتمی استفاده میشه ؟
البته در برنامه بالا گرافیک اصلا مهم نبود و فقط الگوریتم مهم بود برای همین من از رشته استفاده کردم.این هم به دلایلی...

tdkhakpur
پنج شنبه 01 مهر 1389, 22:22 عصر
اما سوال اینجاست که به طور مثال در بازی هایی مثل PES (فوتبال) چطوری هر شی حرکت خودشو میکنه؟
از چه الگوریتمی استفاده میشه ؟


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

returnx
پنج شنبه 01 مهر 1389, 23:13 عصر
شما در این حالتی که توضیح دادید بهالگوریتم چندانی نیاز ندارید فقط کافی برای هر شی که می سازید یک شماره اختصاص بدید.
برای کارهایی جانبی باید خودتان هم بدانید که برای هر شی خصوصیاتی باید درج شود و در این محیطی که شما مد نظر دارید مهمترین خصوصیت حجم شکل و ابعادی هست که شی اشغال میکند تا بدین وسیله تصادف را بتوانید تشخیص بدید.
از پاسختون ممنون مشکل من با تصادف نبود همونطور که توضیح دادم برنامه من تصادف رو تشخیص میداد.
من در بر نامه ام یک تابع به اسم position گذاشته بودم برای دو شیکه left و top هر شی رو مقدار دهی میکرد.
البته یک تابع دیگه هم بود به اسم Animate که دوست دو شی معرفی کرده بودم و کارش صدا زدن تابع position و رسم جدید هر شی بود.
مشکل من این بود که ... اینجوری بگم کلا برنامه از پایه مورد داشت .
شی ها خودشون تابع حرکتی نداشند یک تابع اینهارو به x,y میبورد.
دلیل اینکه برای خود شی ها تابع حرکت نذاشته بودم این بود که اگه یک شی این تابعش اجرا میشد میرفت تو حلقه و هیچ وقت تابع حرکت شی بعدی اجرا نمیشد.
حالا میخوام بدونم در بازی ها برای حرکت از چه الگوریتمی استفاده میشه که اشیا برای حرکت به هم وابسته نیستند؟

tdkhakpur
جمعه 02 مهر 1389, 00:50 صبح
دلیل اینکه برای خود شی ها تابع حرکت نذاشته بودم این بود که اگه یک شی این تابعش اجرا میشد میرفت تو حلقه و هیچ وقت تابع حرکت شی بعدی اجرا نمیشد.
حالا میخوام بدونم در بازی ها برای حرکت از چه الگوریتمی استفاده میشه که اشیا برای حرکت به هم وابسته نیستند؟
ببینید استفاده از الگوریتم برای سیاست بازی یا یک برنامه چیزی جداست و دادن حالت حیات به یک شی که یک موجودیت زنده یا مصنوعی را میخواهد تداعی کند چیزی دیگریست.
به نظر مشکل شما خیلی ساده است شما برای هر شی یک کلاس زیربنایی دارید که مشخصات شی را درش قید میکنه و شما دو حالت برای استفاده از اشیا دارید یکی اینکه کارهای اشیا را به زمان بسپارید و در زماههای متوالی به توابعی که این اشیار را حرکت میدند سر بزنید مثل همین حالتی که شما گفتید مشکل داره و تا اتمام کار یکی از اشیا نمیتوانید به دیگری سر بزنید ولی-->>
دومین راه و بهترین را استفاده که اگث بازیهای هم ازش استفاده میکنند بکارگیری ترد برای این کار هست یعنی هر شی در یک ترد جدا مورد استفاده قرار بگیرید و این ترد میتواند در اصل روح شی شما باشد که باعث میشود بدون دخالت سایر اشیا کار خودش را انجام دهد با توجه به اینکه میتواند محیط خودش را هم بررسی کند.

returnx
جمعه 02 مهر 1389, 09:53 صبح
می شه با تکه کد بیشتر توضیح بدید؟

tdkhakpur
جمعه 02 مهر 1389, 14:02 عصر
با سی ارسال شد ولی توضیح زیادی نداره میتوانید به جاری رسم مستطیل کاری را که شی میخواد انجام بده را داخلش پروسه ترد بنویسید.