نمایش نتایج 1 تا 26 از 26

نام تاپیک: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

  1. #1
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    بعد از حدوده 2 سال کار مفيد نهايتا Kite2D به جايي رسيده که ميتونم در دسترس عمومي قرارش بدم و اميدوارم که مورد قبول گسترش دهنده ها به عنوان يک کار حرفه ايي قرار بگيره و کمک کنند تا پروژه ايراني موفقي تو اين زمينه پا بگيره.
    در حال حاضر ورژن 1 هم بصورت کامپايل شده و هم بصورت سورس بر بستر Git قرار گرفته.
    برای اطلاعات بیشتر به وبلاگ و بخش wiki پروژه مراجعه کنید.
    وبلاگ پروژه:
    kite2d.blog.ir

    Wiki, Source, SDK:
    www.assembla.com/spaces/kite2d

    هرگونه سوالي داشتيد لطفا داخل انجمن مطرح کنید و اگر قصد همکاري در هر بخش و هر نوعي داشتيد در پيغام خصوصي يا با ايميل بنده به آدرس milad_rasaneh2000@yahoo.com تماس بگيريد.
    آخرین ویرایش به وسیله God of War 2 : چهارشنبه 05 خرداد 1395 در 13:57 عصر

  2. #2
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    سلاااااااااام میلاد جان.
    احسنت. آفرین. تبریک. ان شاءالله بازیای خوب باهاش ساخته شه و در آینده شاهد رشد و ارتقاء اون باشیم.

  3. #3
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    سلام محمد عزیز. ممنون امیدوارم همینطور باشه.

  4. #4
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    ورژن 1.0.4 منتشر شد. برای اطلاعات بیشتر به وبلاگ مراجعه کنید.

  5. #5
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    امروز ادیتور فریمورک رو پایه ریزی کردم هرچند که وقت کافی برای همزمان کار کردن روی ادیتور و فریمورک رو ندارم اما پایه های کارو ایجاد کردم تا اگر روز شخصی قصد کمک تو این قسمتو داشت پایه های کار براش محیا باشه. (ادیتور با Qt ایجاد شده)
    تصویر ادیتور:

  6. #6
    کاربر دائمی آواتار c0mmander
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    خونمون D:
    پست
    563

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

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

  7. #7
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    c0mmander@ موافقم با نظرت راجب پشتیبانی از پلتفر هایی مثل android یا ios ولی در حال حاضر خودم به تنهایی دارم روی پروژه کار میکم و اینکه بتونم همزمان روی پلتفرم device ها هم کار کنم تقریبا غیر ممکنه چون پورت کردن کدها خودش پروسه زمان بر و سنگینیه و من به تنهایی نمیتونم این کارو انجام بدم. امیدوارم دوستان گسترش دهنده همکاری کنن تو این قسمت.

  8. #8

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    اینی ک شما نوشتی از نظر من ی کتابخونست ک هر تابعش یک تابع دیگه رو صدا میزنه. شما فقط الکی کد نوشتی کد بی مصرف. اگه قرار باشه واسه ی پنجره و اجرای موتور اون همه کد بزنه دیگه موتور چیه بره وین ۳۲ و جي ال.
    این موتور پایه و اساس نداره .بايد اول کل چیزی ک قراره ساخته بشه رو تو ذهنت پیاده سازی کنی.طرح نهایی رو تجسم کن.
    کدي ک قراره در آخر کاربر بنويسه تا بازی بسازه رودر نظر بگیر بعد شروع کن ب نوشتن. ازاین جور چیزا زیاد نوشته شده در آخر هیچکدام ب نتیجه نمیرسه.چون پایه و اساس نداره. فقط کد زدن رفتن جلو.

    چو معمار گذاشت یک خشت کج تا ثریا میرود دیوار کج.

    بحرحال امیدوارم انتقاد پذیر باشید. ب امید پیشرفت همه.

  9. #9
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    اینی ک شما نوشتی از نظر من ی کتابخونست ک هر تابعش یک تابع دیگه رو صدا میزنه. شما فقط الکی کد نوشتی کد بی مصرف. اگه قرار باشه واسه ی پنجره و اجرای موتور اون همه کد بزنه دیگه موتور چیه بره وین ۳۲ و جي ال.
    این موتور پایه و اساس نداره .بايد اول کل چیزی ک قراره ساخته بشه رو تو ذهنت پیاده سازی کنی.طرح نهایی رو تجسم کن.
    کدي ک قراره در آخر کاربر بنويسه تا بازی بسازه رودر نظر بگیر بعد شروع کن ب نوشتن. ازاین جور چیزا زیاد نوشته شده در آخر هیچکدام ب نتیجه نمیرسه.چون پایه و اساس نداره. فقط کد زدن رفتن جلو.

    چو معمار گذاشت یک خشت کج تا ثریا میرود دیوار کج.

    بحرحال امیدوارم انتقاد پذیر باشید. ب امید پیشرفت همه.
    خوب چون افرادی امثال شما رو کاملا میشناسم این پستو جوک امروز در نظر میگیرم و چون هدفتونو از این کار میدونم نیازی به وقت گزاشتن و جواب دادن نیست.
    نام کاربری با 1 پست که فقط ساخته شده برای اینجور پست دادن ها .لطفا دفعه بعد از نام کاربری اصلیتون استفاده کنید نه نام دوم و ساختگی.
    آخرین ویرایش به وسیله God of War 2 : پنج شنبه 19 شهریور 1394 در 22:49 عصر

  10. #10
    کاربر جدید
    تاریخ عضویت
    مهر 1387
    محل زندگی
    اروميه
    پست
    15

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

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

  11. #11
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    nimvb123456@ سلام. ممنون نظر لطف شماست.
    --------
    ورژن جدید با ویژگی هایی مثل reflection و function binding که کمک بسیاری به طراحی ادیتور میکنه بزودی بر روی مخزن قرار میگیره.

  12. #12
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    تقریبا بعد از این مدت نسبتا طولانی(به دلایلی که میگم در ادامه) برای ورژن جدید, نسخه آزمایشی از فریمورک به همراه Reflection امکاناتی مثل Run-Time Reflection - Dynamic Property - Delegates - Automatic Serialization روی مخزن قرار گرفت. چون هنوز تو مرحله آزمایشی قرار داره این امکانات و ویژگیهای جدیدی قراره در نسخه های بعدی اضافه بشه من روی تمام کلاسهای فریمورک اعمالشون نکردم ولی بصورت اماده و کاملا سازگار با کلاسها قرار دارن و براحتی قابل استفاده هستن. با توجه به درخواست بعضی از دوستان انجینی با همین نام بر بستر فریمورک در حال ساخته که میشه گفت این امکانات بیشتر برای انجین پیاده سازی شدن. کلاسها به دوبخش Core و Engine تقسیم شدن و بخش Assist با Core تلفیق شد. قابل توجه اون شخصی که در در پستش صحبت از موتور میکرد باید بگم که این یک فریمورک (framework) هست نه موتور یا هرچیز دیگه و تقریبا یک هفتس که قراره انجینی بر پایه این فریمورک نوشته بشه.
    -----
    دلیل طولانی شدن این نسخه حجم نسبتا زیاد کدهای اضافه شده و از اون مهمتر پیچیدگی مطلب و کمبود اطلاعات و رفرنس راجب پیاده سازی Reflection روی زبانی مثل ++C بود البته این ویژگی توسط کتابخانه های دیگه ایی مثل boost و ... تقریبا پشتیبانی میشه ولی من قصد ندارم dependency به کتابخانه بزرگی مثل boost داشته باشیم به همین دلیل تمام بخش Reflection از پایه و بدون هیچ dependency نوشته شده ولی در موارد مشابه کاملا با نمونه هایی مثل boost.serialization از نظر قدرت و انعطاف پذیری برابری میکنه که جولوتر راجبش صحبت میکتم. بیشتر امکانات این سیستم روی بستر C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎11 بنا شده که برای کامپایل کد حتما باید کامپایلر سازگار با C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎11 باشه ک الان تقریبا همه ی کامپایلر های معروف از این استاندارد پشتیبانی میکنند.
    خوب ی توضیح کلی هم بدم راجب این امکانات برای دوستانی که علاقه مند هستن. بجز بخش delegate (که اصلا وظیفش چیز دیگس) بقیه بخشها در قالب یک MetaData سیستم عمل میکنند که اطلاعات مربوط به انواع داده ها رو در Run-time در اختیار برنامه قرار میدن.
    بهترین و معمول ترین حالت پیاده سازی meta data (اگر نمونه های مشابه رو دیده باشین) استفاده از macro ها هست و یک سینتکس تقریبا جدید رو به کدها اضافه میکنه که البته خیلی ساده و روان هست برای کاربر, ولی در پشت صحنه پیچیدگی های زیادی از نظر دستوری (و نه از نظر performance) به وجود میاد از جمله استفاده شدید از template ها. وظیفه اصلی این بخش اینه که اطلاعات مربوط به انواع داده ها رو از مرحله compile-time به مرحله run-time انتقال میده و ویژگی های جالبی رو برای کلاسهای دیگه و حتی ابزار های دیگه مثل editor فراهم میکنه. برای مثال شما میتونید برای یک کلاس property تعریف کنید و به اون property توابعی رو نسبت بدید به عنوان setter و getter (که مشابه این امکان در زبانی مثل #C وجود داره) و این property توسط اسمش در قالب string قابل دسترسی هست در هر زمانی. یا حتی یک کلاس رو به همراه تمام عضوها(حتی اشارگرها) و والد ها (در حالت ارث بری) بصورت کاملا اتوماتیک serialize و deserialize کنید ویا عملیاتی مثل property animation رو ایجاد کنید(این امکان در نسخه بعد قرار میگیره) یا اطلاعات کامل راجب یک class/struct/enum و عضوهاش, روابط ارث بریش به همراه جزئیات کامل رو در run-time بررسی کنید (کاملا مورد نیاز توسط ادیتور) و ......
    اینا نمونه ایی از امکاناتیه که بر پایه این سیستم میشه انجام داد و الان در فریمورک موجوده و فقط محدود به این بخش نیست. من برای نمونه کلاس KColor رو به این سیستم پورت کردم و میتونید داخل سرفایل kgraphicstructs.h نمونه ماکرو هارو ببینید.
    اما راجب delegate یه توضیح مختصر بدم. این کلاس استفاده سنگینی از variadic template ها که با استاندارد C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎11 معرفی شدن میکنه (البته نسخه بدون نیاز C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎11 هم در کنارش وجود داره که پیشنهاد نمیشه) و بیشتر هدفم از اضافه کردن این کلاس رهائی از Function pointer های C style بود که واقعا تعریف چنین اشارگر هایی با اون حساسیت شدید به signature و امکان خطای بسیار زیاد کار طاقت فرساییه. البته نا گفته نماند که از نظر سرعت فرقی با Function pointer های سی ندارن.
    داکمنت کلاسها ناقصه و در مواردی که کلاس در حال نوشتن بوده دائما تغییر کرده یا حذف شده. به همین دلیل باید بعد از نسخه stable بعدی کلا تمام داکمنتهارو بررسی کنم.
    ----
    در نسخه جدید (که احتمالا با فاصله زمانی مشابه همین نسخه روی مخزن قرار میگیره) امکاناتی مثل Property Animation و Class Factory (که این قابلیتو به ادیتور میده که کاملا مستقل از انجین کار کنه) و Lua Binding (صرفا برای بخش engine) اضافه میشه.
    ---
    سوال/پیشنهاد ـی داشتین خوشحال میشم مطرح کنید.
    آخرین ویرایش به وسیله God of War 2 : چهارشنبه 08 مهر 1394 در 19:26 عصر

  13. #13

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

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

    روش دوم ک همین ماکروهای شماست با استفاده درست از سی++11 خیلی ساده تر میشه طوری ک ی ماکرو فقط نام متغییر رو بگیره همین.
    من قدیما اینو نوشه بودم. ازین بهتر هم میشه کرد.
    https://barnamenevis.org/showthread.p...B%8C%D8%B3-%29

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

    اگه ی کلاس virtual برا کلاس بزاری ک اطلااتو سریالیز کنه اینطوری هه چی inline میشه و بخاطر هر متغیر کوچیک تابع صدا زده نمیشه.

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

    درضمن این کدهایی ک تو سایت بود رو من همشو دیدم
    همه موتور ک اینا نیست مطمعنا.هست؟ بقیشم بزاری بد نیست.
    شایدم من درست ندیدم.

  14. #14
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    برای بدست اوردن اطلاعات کلاس ها و ... ک بدرد ادیتور و موتور میخوره و لازمه . همون ک شما اسمشو گذاشتی metadata
    چند تا راه وجود داره ی راهش ک تو انریل انجین استفاده شده اینه شما بیای ی چیز جانبی بنویسی که سرفایل ها رو بخونه و اطلاعات رو بهت بده.
    اینطوری دیگه اون شلوغی و بی نظمی رو نداره.
    بله انریل و همینطور Qt چنین ابزاریو دارند ولی پیاده سازی چنین چیزی برای یه پروژه در حد کار من خیلی سنگینه و ممکن نیست و از طرفی هم portable بودن کد هارو از بین میبره یعنی شما برای کامپایل همیشه نیاز به این ابزار جانبی داری. اما راجب اسمش قطعا من چنین اسمیو روش نزاشتم و قبلا هم همین اسمو داشته:
    Meta-Object Compiler

    و یه مطلب جالب دیگه اینکه حتی برنامه نویس های Qt در صورت امکان ترجیح میدن یک کد portable و بدون نیاز به یک ابزار جانبی مثل moc داشته باشن:
    http://woboq.com/blog/reflection-in-cpp-and-qt-moc.html

    روش دوم ک همین ماکروهای شماست با استفاده درست از سی++11 خیلی ساده تر میشه طوری ک ی ماکرو فقط نام متغییر رو بگیره همین.
    من قدیما اینو نوشه بودم. ازین بهتر هم میشه کرد.
    روش های دیگم هست.
    اینی کشما نوشتی چند تا مشکل داره از نظر من یکی اینکه کوتاه نیست.
    کدهاتونو دیدم اما کوتاهی خاصیو ندیدم و ماکروها بیشتر از یک خط رو اشغال میکنند و از property ها هم پشتیبانی نمیکنن, منظورم از پروپرتی یک متغییر ساده نیست که با یک افست ساده وبدون هیچ کنترل و فوق العاده مستعد خطا قابل دسترسی باشه. میدونید که این offset استاندارد نیست و کاملا وابسته به کامپایلر هست و به هیچ عنوان نمیشه برای خواندن یا نوشتن اشیاء روی این offset حساب کرد!
    اما من راجب این کوتاهی وسادگی بیشتر تغییراتی دادم که در نسخه بعدی میبینید. بجز تعریف پروپرتی ها که تو هر جای دیگه (unreal,qt,...) حداقل نیاز به یک خط تعریف ماکرو دارن بقیه موارد کاملا در یک خط خلاصه میشن و تعریف ماکروها کاملا در یک خط خلاصه میشه! نمونه ای که در نسخه بعد موجوده:
    struct KColor : public KProperty<KColor> {
    KColor(U8 R = 255, U8 G = 255, U8 B = 255, U8 A = 255) :
    r(R / 255.0f), g(G / 255.0f), b(B / 255.0f), a(A / 255.0f) {}
    KColor(KColorTypes HexCode) {
    r = ((U8)((HexCode >> 16) & 0xFF)) / 255.0f;
    g = ((U8)((HexCode >> 8) & 0xFF)) / 255.0f;
    b = ((U8)((HexCode)& 0xFF)) / 255.0f;
    a = 1.0;
    }

    inline F32 getGLR() const { return r; }
    inline U8 getR() const { return (U8)(r * 255.0f); }
    inline void setR(U8 R) { r = (R / 255.0f); }

    inline F32 getGLG() const { return g; }
    inline U8 getG() const { return (U8)(g * 255.0f); }
    inline void setG(U8 G) { g = (G / 255.0f); }

    inline F32 getGLB() const { return b; }
    inline U8 getB() const { return (U8)(b * 255.0f); }
    inline void setB(U8 B) { b = (B / 255.0f); }

    inline F32 getGLA() const { return a; }
    inline U8 getA() const { return (U8)(a * 255.0f); }
    inline void setA(U8 A) { a = (A / 255.0f); }

    // only 1 line!
    KMETACLASS(KColor);

    private:
    F32 r;
    F32 g;
    F32 b;
    F32 a;
    };


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

    اگه ی کلاس virtual برا کلاس بزاری ک اطلااتو سریالیز کنه اینطوری هه چی inline میشه و بخاطر هر متغیر کوچیک تابع صدا زده نمیشه.
    منطورتونو کامل متوجه نشدم که این صدا زدن تابع راجب قسمت serialize یا راجب property ها هست؟؟!
    اگر منطورتون property هاس که قطعا چنین چیزی (صدا زدن یک تابع برای مقدار دهی) لازمه یعنی شما اجازه ندارید یه متغییر عددی یا ... رو هرجور که دوست دارین مقدار دهی کنید و این منطق در تمام زبانهایی که از property پشتیبانی میکنن یکسانه. مثلا فرض کنید ما یک property داریم به نام health که مسئوله تنطیم مقدار سلامتی کاراکتره. بازه سلامتی کاراکتر با توجه به لول کاراکتر بینه 0 تا 100 هست. تو این شرایط چه قسمتی مسئولیت چک کردن مقدار ورودی health هست؟ شاید طراح گیم پلی مقدار 300 رو برای health pack در نظر گرفته باشه و وقتی کاراکتر health pack رو دریافت میکنه مقدار سلامتیش از نوار سلامتی هم عبور میکنه و روی 300 قرار میگیره!!!! ولی اگر ما یک تابع برای مقدار دهی متغییر health داشته باشیم این مشکل به وجود نمیاد و این تابع مقدار ورودیو کاملا چک میکنه. و البته سربار این تابع به قدری ناچیزه که شاید در بدترین حالت ممکن (مثلا یک ملیون فراخانی در هر فریم) باز هم مشکلی بوجود نمیاره و بخش property هم کاملا بصورت inline نوشته شده. و نکته مهمتر اینکه این property ها در run-time توسط اسمشون (نه یک افست) قابل دسترسی هستند چیزی که در ماکروهای شما و کلا در پیاده سازی شما ممکن نیست!

    اما شاید منطورتون راجب قسمت serialize هست. اگر نمونه های مشابه مثل boost.serialization یا ... رو دیده باشین یا اصلا منطق سریالی کردنو در نطر بگیریم 2 حالت کلی بوجود میاد برای سریالی کردن یک شی. حالت اول اینه که ما کل شی رو بدونه توجه به جزئیاتش بصورت یکجا به اندازه سایزش در فایل یا ... بنویسیم. تو این حالت ما فقط به یک فراخانی تابع نیاز داریم اما مشکلاتی که وجود داره:
    اشارگر ها تو این حالت ذخیره نمیشن, متغییر ها با توجه به نوع indianess در سیستم های مختلف در موقع لود شدن به مشکل میخورن , padding ساختارها که کاملا وابسته به کامپایلر هست باز هم مثل مورد قبل مشکل ایجاد میکنه و ...

    اما حالت دوم (چیزی که الان در فریم ورک وجود داره) اینه که ما یک شی رو به جزئیاتش (C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎ primitive types) تجزیه کنیم و هر جزء رو بصورت کاملا مستقل با رعایت کردن تمام موارد بالا بنویسیم یا بخونیم. پیاده سازی این حالت بصورت اتوماتیک مثل نمونه ایی که الان در فریمورک پیاده شده (نه اینکه خود برنامه نویس برای هر کلاس بصورت دستی بنویسه) با تنها یک فراخانی تابع (چیزی که شما گفتید) فکر نمیکنم ممکن باشه. اگر هست لطفا مثال بزنید.
    اما راجب کلاس virtual که گفتید من باز هم منطورتونو متوجه نشدم احتمالا منطورتون تابع virtual بوده! گفتید کدهارو دیدید و میدونید که من برای بخش سریالی از هیچ تابع virtual کمک نگرفتم و اصلا این قسمت هیچ سربار اضافه ایی برای توابع virtual و جستجوی v table نداره حتی توابع استفاده شده هم کاملا static هستند.

    و در مورد کد نویسیت . اصلا اصولی نیست . خیلی جاها فقط کد الکی تولید شده مثلا عوض استفاده از لیست پیوندی امدی داخل همون کلاست اشاره گر به عنصر بعدی دادی و دوباره دستی همه چی رو نوشتی.
    خوب قطعا کدهای اضافه ایی وجود داره که باید اصلاح بشه چون بخشی از کلاسهای core رو دوستان دیگه ایی نوشتن که من وقت نکردم اصلاحشون کنم. ولی راجب لیست پیوندی باید بگم که بعضی از کلاسها استفاده سنگینی از ساختار لیست میکنند و من دقیقا حرف شمارو در تست های اولم انجام دادم یعنی از لیست های پیوندی STL استفاده کردم اما اگر امتحان کرده باشین متوجه میشین که لیست های پیوندی STL در شرایطی که گره های زیادی رو داشته باشن همینطور که کند تر و کند تر میشن از طرفی هم شروع به بلعیدن حافظه میکنند (بصورت تساعدی!)
    خوب تو این شرایط دو راه وجود داره یا باید لبست های پیوندی رو بازنویسی کنیم به همراه یک memory allocator اختصاصی یا میشه با اضافه کردن یک اشارگر ساده تمام مشکلو در کوتاترین و سریعترین حالت ممکن برطرف کنیم! که خوب بدیهیه که پروژه ایی با فقط 1 برنامه نویس راه دومو انتخاب میکنه!
    اما خوب کلاس memory allocator هم از نوع stack و هم از نوع pool به زودی اضافه میشه که شاید continer های خیلی ضروری مثل لیست و وکتور رو سازگار با این کلاسها بازنویسی کردم.

    درضمن این کدهایی ک تو سایت بود رو من همشو دیدم
    همه موتور ک اینا نیست مطمعنا.هست؟ بقیشم بزاری بد نیست.
    شایدم من درست ندیدم.
    تمام کدها موجوده ولی موتوری فعلا وجود نداره! و من بار ها گفتم که این پروژه یک framework هست (نه موتور/انجین) مثل تمامه framework های دیگه (SFML - ClanLib - ....)
    البته انجین/موتور تو پست قبل هم گفتم که در حاله ساخته و احتمالا در نسخه بعدی ی بخشهایی از انجین/موتور رو میتونید ببینید روی مخزن.
    ممنون از اینکه نظر دادی.
    آخرین ویرایش به وسیله God of War 2 : پنج شنبه 16 مهر 1394 در 23:08 عصر

  15. #15

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

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

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

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


    class MyObject : GameObject
    {
    Vec3 Position;
    Vec3 Rotation;
    Vec3 Scale;
    float Health;
    float Bullet;
    unsigned Score;


    DEF_START(MyObject)
    DEF_VAR(Position)
    DEF_VAR(Rotation)
    DEF_VAR(Scale)
    DEF_VAR(Health)
    DEF_VAR(Bullet)
    DEF_VAR(Score)
    DEF_END()

    void OnSerialize(Stream& s)
    {
    s << Position << Rotation << Scale << Health << Bullet << Score;
    }
    }

    کاش ی امکاناتی ب سی++ اضافه میکردن ک مثلا همون موقع کامپایل اطلاعت کلاس ها و .. رو ذخیره کنه و استفاده بشه.
    مثل سی شارپ. کار سختی نیست ک این کامپایلر ک دارهکارشو می کنه بحرحال.

    در مورد Container ها . از نظر من مسخره ترین چیز همین کتابخونه خود سی++ هست خودت بنویسی بهتره.
    ای کاش وقت داشتم با هم می نوشتیم.

    فعلا بای . موفق باشی.

  16. #16
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    خوب اسکریپت که قطعا هست ولی صرفا برای بخش طراحی گیم پلی استفاده میشه و اصلا قرار نیست جایگزین ++C بشه! میشه گفت اسکریپتو برای کسانی که نمیتونن از ++C استفاده کنن اضافه کردم و کاربرد دیگه ایی نداره!

    خوب اون مثالی که زدی برای سریالی کردن دقیقا همون چیزیه که الان تو فریمورک هست! ولی فرقش اینه که دیگه این تابع رو شما نمینویسی و فقط کافیه به ماکرویی که تو پست قبل گفتم کلاسو معرفی کنی و تمام!
    یعنی همون کلاس KColor که تو پست قبل هست بدون هیچ کد اضافه ایی کاملا آمادس برای اینکه مثلا چنین عملیاتی رو روش انجام بدی و دقیقا همون اتفاقی میفته که توی پست خودت مثال زدی:
    KColor myColor(KC_BLUE);
    FileIO fio;

    fio << myColor; // write
    fio >> myColor; // read


    بخش اسکریپتم دقیقا از همون ماکرو استفاده میکنه و فکر نمیکنم دیگه بشه مختصر و تمیزتر از این نوشت! یعنی شما با یک خط ماکرو عملا reflection-serialization-script binding رو پوشش میدین بدون هیچ کد اضافه ایی!

  17. #17
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    خوب بعد از کلی کلنجار رفتن با ماکروها برای سادتر کردنشون نهایتا به این نتیجه رسیدم که داشتن یه ابزار دیگه برای پارس کردن هدر ها میتونه خیلی بهتر باشه و خیلی محدویت های ماکرو هارو هم از بین ببره. تو این چند روز در حال نوشتن پارسر برای هدر ها بودم که تقریبا امادس البته فعلا فقط میتونه کلاسهارو تجزیه کنه و باید امکان تجزیه enum هارو هم بهش اضافه کنم. امکانات زیادی داره که بعد از اپدیت بعدی میگم روش کارشم تقریبا شبیه UHT هست.
    آخرین ویرایش به وسیله God of War 2 : یک شنبه 26 مهر 1394 در 21:41 عصر

  18. #18
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    نسخه آزمایشی header parser به همراه سورس آپلود شد. امکاناتی که الان داره هم میتونید تو وبلاگ ببینید و هم میتونید تستش کنید(نسخه کامپایل شده در وبلاگ موجوده) برای تست هم از کلاس KColor استفاده کنید.
    نحوه کار این ابزار تقریبا مشاب UHT هست که ابتدا باید کلاس و توابع و پراپرتی هارو مشخص کنید و سپس ابزارو اجرا کنید و آدرس پوشه header و پوشه خروجی رو بهش بدین و نهایا بعد از پویش کل فایلها برای هر class/struct/enum که مشخص شده باشن فایلی با همان نام تولید میشه (با پسوند khgen.h) و در ادرسی که برای خروجی دادین ذخیره میشه. محتوای این فایل شامل ماکروهای مورد نیازه که یکی از ماکروها باید در هدر قرار بگیره و دیگری در فایل سورس.(فایلهای نمونه تولید شده در وبلاگ موجود هست)
    ناگفته نماند که این ابزار هیچ شناختی از ++C نداره و به هیچ وجه نمیشه گفت یک cpp parser هست! و اصلا نیازی نیست که شناختی داشته باشه. روش کارش به این شکله که همه جزئیات رو در چند مرحله حذف میکنه تا فقط مواردی که مورد نیازه باقی بمونه بعد اون موارد رو پویش میکنه طبق یه دستور العمل از پیش تعریف شده. برای اطلاعات بیشتر کلمه ad-hoc parser رو میتونید جستجو کنید.
    تقریبا حدوده 1600 خط کد برای این ابزار نوشتم که نسبت به وقتی که صرف شد فکر میکنم کاملا ارزش داشت چون امکاناتی میده که تقریبا در استاندار های ++C حال حاضر غیر ممکنه, مثلا در ساده ترین حالت شما نمیتونید مقادیر پیشفرض پارامتر های یک تابع رو بدون استفاده از ماکروها بدست بیارین و همچنین کد خیلی شلوغ و پیچیده میشه اگر با ماکروها اینکارو انجام بدین.

    حالت های دستوری و پارامتر هایی که پشتیبانی میکنه رو در آینده بصورت کامل در سایت پروژه قرار میدم.
    مواردی که پشتیبانی میشه رو هم میتونید داخل وبلاگ بخونید + نمونه کد تولید شده.

    وبلاگ پروژه تغییر کرد. آدرس تو پست اول.
    آخرین ویرایش به وسیله God of War 2 : دوشنبه 04 آبان 1394 در 13:31 عصر

  19. #19
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    قابلیت class factory هم به امکانات قبلی که بطور اتوماتیک (توسط هدر پارسر) تولید میشن اضافه شد. البته سورس هنوز آپلود نشده چون ورژن بعدی باید یکسری امکانات دیگه هم داشته باشه که هنوز اماده نشدن.
    این قابلیت بیشتر مناسب ادیتور هست به این خاطر که ادیتور میتونه بدون اطلاع از کلاسها اونارو ایجاد کنه و مقادیرشنو تغییر بده. مثلا به عنوان نمونه:

    KObject *anyObject = KMetaManager::createObject("ClassName");
    anyObject->setProperty("PropertyName", value);


    خوب این سیستم کارو خیلی راحت میکنه برای ادیتور چون کاملا برا پایه اسم (string) عمل میکنه و نیازی به اطلاع از پیاده سازی کلاسها نداره.
    آخرین ویرایش به وسیله God of War 2 : پنج شنبه 07 آبان 1394 در 14:46 عصر

  20. #20
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

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

  21. #21
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

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

  22. #22
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    پروژه در حال رفتن روی بستر CMake هست که فعلا بیشتر برای سیستم عامل ویندوز و تولید فایلهای Visual Studio بهینه شده(sln.) ولی نهایتا برای هر سه سیستم عامل تکمیل میشه. فکر میکنم با این کار گسترش پروژه برای هرکس دیگه ایی فوقالعاده ساده میشه چون محیط کار با چند کلیک ساده (به کمک CMake) ایجاد میشه و نیازی به تنظیم جزئیات نیست.
    ----
    ماژول های window و input هم برای اینکه در آینده بتونیم راحت تر روی device های android , ios پورت کنیم تماما بر پایه sdl باز نویسی شدن که قابلیت handle کردن tuch screen ها رو هم دارند. (قبلا بر پایه glfw بودن)
    این تغییرات به همراه یکسری ویزگی های دیگه در نسخه بعدی موجود هستن البته تا نسخه بعدی زمان زیادی مونده.

  23. #23
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    اخرین تغییرات ادیتور و انجین در وبلاگ.
    K2DEditor.png

  24. #24
    کاربر دائمی آواتار orache
    تاریخ عضویت
    مرداد 1391
    محل زندگی
    رشت
    سن
    27
    پست
    571

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    انصافا دمت گرم . 3 - 4 سال پیش وقتی دوم دبیرستان بودم آرزوی ساخت چنین چیزی رو داشتم ولی به دلیل اطلاعات ناکافی رهاش کردم
    امیدوارد موفق بشی

  25. #25
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

    بخش ادیتور lua با یکسری امکانات پایه تقریبا تکمیل شد و تماما از کلاسهای خود Qt برای این کار استفاده کردم که باعث شد امکاناتی مثل Code completion با دقت و کیفیت بیشتری نسبت به نمونه های مشابه مثل QScintilla انجام بشه. البته هنوز موارد مربوط به debug به این بخش اضافه نشده اما در نسخه های بعدی حتما قرار میگیره.
    پروژه هم به دلیل مسائل تحریم از بستر bitbucket به assembla منتقل شد.
    نمونه کار تا اینجا:
    k2deditor.png

  26. #26
    کاربر تازه وارد آواتار God of War 2
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    تهران
    پست
    32

    نقل قول: Kite2D Game framework - فریم ورک بازیسازی 2 بعدی

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

تاپیک های مشابه

  1. پاسخ: 20
    آخرین پست: دوشنبه 04 تیر 1386, 18:24 عصر
  2. مراجع و رفرنس های برنامه نویسی در دات نت فریم ورک
    نوشته شده توسط Mahdi_Delphi در بخش برنامه نویسی مبتنی بر Microsoft .Net Framework
    پاسخ: 4
    آخرین پست: جمعه 05 خرداد 1385, 13:43 عصر
  3. طراحی فریم ورک برای کار با دیتابیس sql
    نوشته شده توسط .مهدی فهمیده غلامی. در بخش C#‎‎
    پاسخ: 22
    آخرین پست: دوشنبه 25 اردیبهشت 1385, 05:57 صبح
  4. استفاده از کامپوننتهای دات نت فریم ورک یک
    نوشته شده توسط بابک زواری در بخش VB.NET
    پاسخ: 14
    آخرین پست: چهارشنبه 03 اسفند 1384, 03:07 صبح
  5. مشکل ایجاد شده بعد از نصب دات نت فریم ورک
    نوشته شده توسط (سیدشریفی) در بخش VB.NET
    پاسخ: 5
    آخرین پست: یک شنبه 13 دی 1383, 08:58 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •