تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 19

نام تاپيک: ساختار یه بازی از پایه

  1. #1
    داره خودمونی میشه
    تاريخ عضويت
    Aug 2012
    پست ها
    31

    14 ساختار یه بازی از پایه

    سلام!
    در حال آغاز یه بازی هستم رو SDL با C++ و در مورد ساختارش یه سری سوال ها داشتم که شاید بتونم اینجا پاسخ بگیرم!!
    کلا اگه کسی با ساختار انجین ها و بازی ها آشنایی داره کمک کنه چون قبلا تجربه ای رو این نداشتم!!! ساختار خودمم هم به این شکله که (فعلا) یه حلقه هست که سه تا تابع داره، اینپوت، آپدیت، درا که اینپوت هرچی ورودی هست رو میگیره آپدیت نسبت به اونها تغییر میده روی مدل و درا مدل رو رندر میکنه! مدل هم یه کلاسه که یه سری آبجکت تو خودش داره(مث تکست و بکگراند و اینحرف ها) که یه سری حرکت کننده اند یه سری نه! آبجکت هاش هم یه کلاس کلی آبجکت ن که چیزایی مث کاراکتر و اسپرایت های دیگه ارث میبرن ازش این وسط!!! حالا این یه مقدار نا مطمئن و خامه و میخواستم بدونم اگه کسی نظری داره چه حرفه ای چه نه خوشحال میشم!

  2. 2 کاربر از EYEprogrammer بخاطر این مطلب مفید تشکر کرده اند


  3. #2
    حـــــرفـه ای ehsan_wwe's Avatar
    تاريخ عضويت
    Mar 2008
    محل سكونت
    تهران (پایین شهرش) In The End
    پست ها
    2,557

    پيش فرض

    سلام این حلقه به خیلی چیزا احتیاج داره
    مثلا اگه i = با یک باید استارت بشه استارت معمولا مقدار های اولیه برای یه بازی توش داده میشه
    یا یه پارامتر برای حرکت ها حرکت ها
    برای هر آبجکت یه مارتیکس بساز 3 در 3 که توش scale rotation posiion رو قرار بدی که به اینا همه varable[,,] vector میگن
    برای دایرکس بگو چه کارایی می خوای بکنی یادت باشه حتما از collada برای ایمپورت ابجکت استفاده کنی که یه دیتابیس کامل میده از همه چیش
    و از api های directx 11 برای به روز بودن انجین

    همینارو فعلا یادم میومد موفق باشی

  4. 2 کاربر از ehsan_wwe بخاطر این مطلب مفید تشکر کرده اند


  5. #3
    کـاربـر بـاسـابـقـه god of war 2's Avatar
    تاريخ عضويت
    Jun 2007
    پست ها
    585

    پيش فرض

    سلام.
    ساختار حلقه در پایه ایی ترین حالت همینجوری هست یعنی معمولا 3 تا تابع اصلی هستند که به ترتیب دریافت ورودی - آپدیت - رسم رو انجام میدن. اما با توجه به نوع طراحیت میتونی این ساختارو به حالت های دیگه مثل رویدادگرا (Event) گسترشش بدی.
    یه مثال ساده برای بخش input به این شکله که شما یک ساختار رویداد تعریف میکنی که مثلا شامل آخرین کلید فشرده شده , آخرین مختصات موس, ... هست. داخل تابع ورودی این ساختار رو برای هر فریم مقدار دهی میکنی و در نهایت این ساختار رو به تنهایی به تابع کنترل ورودیت ارسال میکنی بجای اینکه مستقیما در هر فریم تمام ورودی هارو چک کنی. مزیتی که این روش داره اینه که برای هر فریم و در 1 لحظه کل وضعیت ورودی رو با یک ساختار مناسب در اختیار داری. اگر دیده باشید در بعضی از بازیها حرکات ترکیبی به نام combo وجود داره که با "فشردن همزمان چند کلید" صورت میگیره. این جور مواقع مثالی که در بالا زدم میتونه خیلی مفید باشه برای تشخیص و پردازش تمام کلید های فشرده شده در یک زمان.
    برای تابع update زیاد جالب نیست که همه چیز رو update کنی بجاش میتونی ساختاری پیاده کنی که فقط بخشی که در حال حاضر در حال رسم شدن هست رو آپدیت کنه.
    همچنین برای رسم میتونی این کارو انجام بدی.
    از این دست مسائل شامل جزئیات زیادی میشه که در نهایت باعث میشه این 3 تابع اصلی به شاخه های زیادی تقسیم بشن و از حالت خام و نا مطمئن خارج بشن.

    --------
    راجب SDL باید بگم که این کتابخانه از روش نرم افزاری برای رسم استفاده میکنه و شما امکان استفاده از سخت افزار گرافیکی (کارت گرافیک) و قدرت سخت افزاری رو نداری.
    Last edited by god of war 2; 08-05-2014 at 23:09. دليل: نطرم راجب SDL

  6. 3 کاربر از god of war 2 بخاطر این مطلب مفید تشکر کرده اند


  7. #4
    داره خودمونی میشه
    تاريخ عضويت
    Aug 2012
    پست ها
    31

    پيش فرض

    خیلی ممنون و خیلی مفید بود! میخواستم بدونم از نظر شما توی حلقه اصلی مود های مختلف برای منو و بازی و ... بذارم یا همه رو به شکل ورلد در بیارم و یه جور رفتار کنم باهاشون(یعنی منو هم یه نوع ورلد باشه که آبجکتاش دکمه ها و اینا هستن یا مثلا صفحه ای که اول بازی میاد هم یه ورلد باشع که یه عکس داره و ...)؟

  8. این کاربر از EYEprogrammer بخاطر این مطلب مفید تشکر کرده است


  9. #5
    کـاربـر بـاسـابـقـه god of war 2's Avatar
    تاريخ عضويت
    Jun 2007
    پست ها
    585

    پيش فرض

    بستگی داره که منطور شما از ورد یا word چی باشه؟؟ یا اصلا با چه برنامه ایی داری کار میکنی و واژه ورد داخل اون برنامه چطور تعریف شده باشه؟؟؟
    اگر از انجین های آماده ساخت بازی استفاده میکنی که من تجربه ایی راجبش ندارم و نمیتونم راهنماییت کنم.
    ولی اگر از پایه داری کار میکنی پس در اینصورت وردی وجود نداره و شما با یکسری اشیاء پایه مثل sprite, color, line,text , .... سروکار داری. این اشیاء نقش آجر در ساخت ساختمان رو ایفا میکنند. یعنی به فرض مثال یک منو تشکیل میشه از 1 شی sprite و تعدادی شی text که بصورت منظم زیر هم دیگه قرار گرفتن و یک منوی کشویی رو تشکیل دادن. یا مثلا یک دکمه دقیقا یک sprite هست که نسبت به وضعیت موس واکنش نشون میده.
    اما راجب اینکه صفحه شروع بازی مجزا باشه از مراحل بازی بستگی به طراحی ساختارت داره. معمولا سازندگان بازی منوی شروع بازی رو مجزا از گیم پلی بازی تعریف میکنن. حتی من در مواردی دیدم که فایل منو مستقل از فایل اصلی بازی هست یعنی منو در یک فایل exe جداگانه قرار داره و تمام تنطیمات رو ست میکنه بعد فایل اصلی بازی که یک exe دیگه هست رو با تنظیمات مناسب run میکنه. این کار از نطر فنی میتونه مزیت های زیادی داشته باشه مثلا منوی شروع همیشه در بالاترین کیفیت نمایش داده میشه چون پردازش زیادی نداره و مشکلی ایجاد نمیکنه و میتونه به کاربر حس خوبی رو منتقل کنه. اما این اختیار رو به کاربر میده که بتونه مثلا از بخش option تنطیمات گرافیکی "بازی اصلی" که در یک فایل exe دیگه هست رو خودش مدیریت کنه و وقتی که گزینه play رو کلیک میکنه فایل exe بازی اصلی با تنطیمات گرافیکی خود کاربر run بشه. برای این کار هم روشهای متنوعی وجود داره میتونی مثلا تنظیمات رو داخل یک فایل ذخیره کنی و بازی از رو اون فایل تنظیمات رو بخونه. یا میتونی تنظیماتت رو مستقیما از طریق پارامتر به فایل exe ارسال کنی و ...
    ----
    در کل اگر قصد داری که بازیتو از پایه بنویسی باید مسائل "خیلی زیادی" رو در نطر بگیری ...

  10. 3 کاربر از god of war 2 بخاطر این مطلب مفید تشکر کرده اند


  11. #6
    داره خودمونی میشه
    تاريخ عضويت
    Aug 2012
    پست ها
    31

    پيش فرض

    خیلی ممنون !! اما منظور من از ورلد با «ل» world بود. که یه شیءه که آبجکت های بازی رو تو خودش داره مثلا همین اسپرایت ها و تریگر ها و تکست و ... یه سری آبجکتن که داخل worldان! و پرسش اصلیم هم این بود که با منو مثل یه world رفتار کنم یعنی تکست ها و دکمه ها و ... رو آبجکت هایی تصور کنم که توی worldام و بعد با ورودی آپدیتشون کنم یا این که یه مود جداگونه بذارم برای منو که توی وایلم در صورت استیت منو اون رو انجام بدم. برای مثال؛
    حالتی که توش مستقیم با world سر و کار دارم: [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    حالتی که مود منو جداگونه س: [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    به نظرم اولی بهتره ولی نظر شما رو هم میخوام بدونم.

  12. این کاربر از EYEprogrammer بخاطر این مطلب مفید تشکر کرده است


  13. #7
    کـاربـر بـاسـابـقـه god of war 2's Avatar
    تاريخ عضويت
    Jun 2007
    پست ها
    585

    پيش فرض

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

  14. 2 کاربر از god of war 2 بخاطر این مطلب مفید تشکر کرده اند


  15. #8
    داره خودمونی میشه
    تاريخ عضويت
    Aug 2012
    پست ها
    31

    پيش فرض

    خیلی باز هم ممنون!! در مورد پکیج بندی کار یه پکیج World مد نظرمه (که توش Object هست با خود کلاس World -که world توش یه تابع آپدیته که خودشو با اینپوت آپدیت میکنه) و بقیه آبجکت ها که از خود آبجکت ارث میبرن) با یه Utilities که باید باشه همیشه به هر حال(که توش چیزایی مث ابزار هندسی و ادیتور و اینا هست) و Input که توش چیزایی که مربوط به ورودیه میره و Render که ابزار مخصوص نمایش و اینا رو اینور کنترل میکنم... فعلا پرسش دیگه ای ندارم ولی باز هم خوشحال میشم نظر کسی رو بدونم(چون تا حالا یه پروژه ی انجین مانند به این بزرگی و پر جزییاتی نداشتم)
    Last edited by EYEprogrammer; 11-05-2014 at 10:22. دليل: پروژه ی انجین مانند کوچیک و ساده داشته ام!

  16. این کاربر از EYEprogrammer بخاطر این مطلب مفید تشکر کرده است


  17. #9
    حـــــرفـه ای ehsan_wwe's Avatar
    تاريخ عضويت
    Mar 2008
    محل سكونت
    تهران (پایین شهرش) In The End
    پست ها
    2,557

    پيش فرض

    من هرچی فک میکنم نمیفهمم ان world چیه ؟
    روشن تر بگو داری چی کار میکنی ؟
    یه کلاس ساختی برا اینکه پراسس پایین بیاد فقط وقتی keypress داریم لوپ کنه ؟ این لوپ تو اولین خط یا آخریشم رندر بشه ؟ بعد ای این میگی world

    خواهشن eng حرف بزن بیشتر من اصلا با واژه های فارسی آشنایی ندارم مثل ارث بری (فکنم یه جور brush fire باشه درسته ؟)

  18. این کاربر از ehsan_wwe بخاطر این مطلب مفید تشکر کرده است


  19. #10
    داره خودمونی میشه
    تاريخ عضويت
    Aug 2012
    پست ها
    31

    پيش فرض

    من تا حالا یه بازی رو از پایه نساختم ولی دیگه فکر کنم این مفهوم روشن باشه که هر جوری هم شما بخواید ساختارش (structure) رو طراحی (design) کنید باید یه class داشته باشید که همه ی آبجکت (object) های اون level یا بازیتون رو توش نگه دارید. اسمشو هم من گذاشته ام World حالا یکی میتونه بذاره Level یا هرچی.

    ارث بری (class inheritance) هم که دیگه یکی از ساده ترین مفاهیم شی گرایی(object oriented) هست.

    حلقه(loop) هم برای اینه که هر فریم (frame) یه کد اجرا بشه که ورودی(input) بگیره با اونا World یا همون بازی رو update کنه و بعد draw یا همون render کنه! تا برا فریم بعدی. این ساختار، استاندارد جایی نیست ولی تا اونجایی که من خوندم و کار کردم نزدیک به یه ساختار خوبی هست(هنوز شروع به نوشتنش نکرده‌ام)

  20. این کاربر از EYEprogrammer بخاطر این مطلب مفید تشکر کرده است


صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •