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





صفحه اول انجمنها -> ساخت بازی های کامپیوتری به وسیله نرم افزار Game Maker -> turn كردن كاراكتر
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي
برو به صفحه 1, 2, 3, 4  بعدي

turn كردن كاراكتر
نويسنده
پيغام
MEHRDAD_R
بازی ساز
بازی ساز


تاريخ عضويت: 2 شنبه 3 مهر 1385
تعداد ارسالها: 199


4 شنبه 2 اسفند 1385 - 10:12
پاسخ بصورت نقل قول
با سلام
چطوري ميشه در يك بازي platform دوبعدي براي كاراكتر زماني كه مي خواهد به چپ يا راست
برود حالت چرخيدن گذاشت.يعني با 2 تا 3 تا فريم حالت turn داشته باشد و يكباره تيك نخورد. مثل بازي FLASHBACK-ANOTHER WORLD . سواله ديگه اينكه با اصلا با گيم ميكر ميشه از اين نوع بازي ها را ساخت؟ممنون--مهرداد
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي نام كاربري در پيغامگير MSN
 

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


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


4 شنبه 2 اسفند 1385 - 10:26
پاسخ بصورت نقل قول
من از گيم ميكر خبر ندارم شايد يه چيزي به عنوان انيميشن واسط(اين اسميه كه ما براي اين انيميشن گذاشتيم) داشته باشه كه البته مسلما نميتونه يه دستور كوتاه باشه بايد يه كلاس باشه.
به همين دليل بعيد ميدونم كه تو گيم ميكر باشه.
اما ما براي اين كار يه كلاسي طراحي كرديم كه تو اون براي هر جفت انيميشن امكان قرار دادن يك انيميشن واسط وجود داره.
توي اون كلاس هر زمان كه دستور تغيير انيميشن صادر ميشه چك ميكنيم كه اگر انيميشن واسطي وجود داره اول اون رو نشون ميديم و پس از اتمامش نوبت به انيميشن درخواست شده مي رسه.

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

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

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


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


4 شنبه 2 اسفند 1385 - 12:29
پاسخ بصورت نقل قول
نقل قول:

با سلام
چطوري ميشه در يك بازي platform دوبعدي براي كاراكتر زماني كه مي خواهد به چپ يا راست
برود حالت چرخيدن گذاشت.يعني با 2 تا 3 تا فريم حالت turn داشته باشد و يكباره تيك نخورد. مثل بازي FLASHBACK-ANOTHER WORLD


من اين بازي رو نديدم . اندازه كاراكتر چقدره ؟ اگه كوچيك باشه مشكلات كمتره چون مقدار x يا y كه كاركتر بايد طي كنه تا به انتهاي انيميشن برسه كمتره ...
من براي بازي ادونچر سبك نورهود همين مشكل رو دارم . وقتي كاراكتر به محل كليك شده مي رسه بايد به سمت دوربين چرخش كنه ( چون كاركتر خيلي بزرگه بايد حتما اين انيميشن turn باشه وگرنه به حالت خيلي بدي تيك مي خوره ) كاري كه من مي كنم و نورهود هم از اون استفاده كرده اينه كه كاركتر دقيقا به محل كليك شده نمي ره و كمي جلوتر يا كمي عقب تر قرار مي گيره چون انيميشن راه رفتن بايد تموم بشه . بعد از اتمام انيميشن راه رفتن (Animation End Event) انيميشن turn پخش مي شه ...

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

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


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


4 شنبه 2 اسفند 1385 - 14:47
پاسخ بصورت نقل قول
مجتبی کارتون رو با گیم میکر میسازین؟ (آخه این دوستمون گویا داره درباره gm میپرسه و من فکر میکردم شما با gm نمیسازین.(اگرچه حرف شما این معنی رو نمیده که با gm نمیسازین ولی خوب سوالیه که به ذهنم رسید گفتم بپرسم.))
بعدش یه سوال دیگه هم دارم تو گفتی بازیتون دو بعدیه مگه نور هود هم دوبعدی بود؟
بعدش در مورد راهی که گفتی خوب این فقط برای توقف کار میکنه و بنا براین اگه بخوایم با این روش چرخیدن به بالا و پایین و چپ و راست و شمال شرق و ... رو بنویسیم، برای هرکدوم باید یک کد جدا داشته باشیم در حالی که به راحتی میشه همه این کد ها رو یکی کرد.(البته اینو برای gm نمیگم. چون به یه جور کلاس و تعریف نوع داده نیاز داره که شاید تو gm نشه.)

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

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

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


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


4 شنبه 2 اسفند 1385 - 15:01
پاسخ بصورت نقل قول
نقل قول:
مجتبی کارتون رو با گیم میکر میسازین؟


آره .

نقل قول:
بعدش یه سوال دیگه هم دارم تو گفتی بازیتون دو بعدیه مگه نور هود هم دوبعدی بود؟


آره 2 بعدي بود . انيميشن راه رفتن رو به صورت اسپريت روي BG انداختند . ( كاراكتر فقط در راستاي x حركت مي كنه)

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


آره خوب گفتم شايد بازيشون مثل نورهوده ... البته اين يه راهنمايي بود شايد ازش بتونه استفاده كنه و براي جهت هاي ديگه گسترشش بده . من چون بيشتر از اين نمي خوام در همين حد كفايت مي كنه . در مورد جهت هاي ديگه هم بايد حتما راهي باشه من بلد نيستم و دنبالشم نمي رم چون نياز ندارم ولي اگه كمي با GM ور بريد فكر كنم راه بهينه اي براش وجود داشته باشه ...

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

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


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


4 شنبه 2 اسفند 1385 - 15:42
پاسخ بصورت نقل قول
ايولا من هم همين مشكل رو دارم...
البته هنوز به اونقدر جلو نرفتم كه بخوام اين مشكل رو حل كنم ولي منظور شما رو نفهميدم آقا مجتبي...
مثلا كاراكتر ما يه چيزي تو مايه هاي همسايه جهنميه و ما مي خوايم حالا كه رو به سمت چپه روش رو بسمت راست برگردونه و به همون سمت بره... پس مسلما بايد براش يه انيميشن يا اسپريت اضافي در نظر بگيريم و براش يه كد بنويسيم كه اگر نيازي بود كه انيميشن اجرا بشه ابتدا انيميشن چرخش و بعد انيميشن اصلي...
خب همينطور كه ديديد راه حل من هم مثل اتاي عزيزه Very Happy

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

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


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


4 شنبه 2 اسفند 1385 - 17:03
پاسخ بصورت نقل قول
مصطفي سپهريان نوشته:

خب همينطور كه ديديد راه حل من هم مثل اتاي عزيزه Very Happy


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

به هر حال برای مشخص شدن منظورم و این که شاید کمکی به کسی بشه کد مربطز به کلاس BManagedAnimation مون رو که به همین منظور طراحی شده اینجا میزنم. این کد به زبان ++C هستش و سعی میکنم برای کسانی که با این زبان آشنا نیستن به اندازه کافی توضیح بنویسم.
اول از همه خدمتتون عرض کنم که همونطور که بالا گفتم یا شاید هم نگفتم این کلاس یه آرایه از انیمیشن ها رو میگیره که اونها کل انیمیشن های اصلی مربوط به یک آبجکت هستند. بعد انیمیشن های واسط رو برای ترکیب های مورد نظر از انیمیشن های اصلی میگیره. یعنی اینکه مثلا برای یک جفت انیمیشن حرکت به چپ و بالا یه انیمیشن واسط چرخش از چپ به بالا به آبجکت داده میشه.

حالا کد رو ببینید تا بعد.
اگه سوالی هم بود در خدمتم.
وتوصیه میکنم حتما این رو بخونید چون یه کار بسیار سخت رو به نحوی بسیار زیبا و آسون داره انجام میده.
كد:

class BManagedAnimation
{
public:
   //به معنی تعریف نوععه یعنی اینایی که این زیر میبینی typedef
   //یه جور نوع هستند

   //یک جفت از انیمیشنها رو مشخص میکنه
   typedef pair<int, int> StatePair;
   //به یک جفت انیمیشنها یک انیمشن واسط نسیت میده
   typedef map<StatePair, BAnimation> TransitionMap;

private:
   int size;
   //آرایه انیمیشنها
   vector< Pointer<BAnimation> > anims;
   //محل نگهداری انیمیشنهای واسط
   TransitionMap animtable;
   //شماره انیمیشنهای فعلی و بعدی
   int nextstate, currentstate;
   // انیمیشن درحال پخش
   BAnimation *current;

public:
   // سازنده کلاس
   BManagedAnimation(const vector< Pointer<BAnimation> > &anims,
                  const TransitionMap &animtable)
   {
      size = anims.size();
      current = this->anims[0];
      currentstate=0;
      nextstate = -1;
   }
   //تابع تغییر انیمیشن
   //شماره انیمیشن بعدی را دریافت میکند
   void setAnimation(int state)
   {
      //چک کردن شماره درخواست شده
      Exception::Test(state>=0 && state<size, "Managed Animation state out of range!");
      //جشتجو برای انیمیشن واسط
      TransitionMap::iterator animptr = animtable.find(StatePair(currentstate, state));
      if( animptr != animtable.end())
      {
         //در صورت وجود واسط، انیمیشن واسط انیمیشن فعلی خواهد بود
         nextstate = state;
         current = &animptr->second;
         return;
      }
      else
         //در غیر اینصورت انیمیشن درخواست شده انیمیشن فعلی میشود
         current = anims[state];
   }
   //فریم بعدی را برای نمایش آماده میکند
   //شماره افزایش فریم را دریافت میکند
   void IncFrame( int num )
   {
      if(current->getFrameIndex() + num > current->Size() && nextstate != -1)
      {
         //اگر انیمیشن فعلی تمام شود و انیمیشن بعدی به عنوان انیمیشن قابل پخش
         //قرار میگیرد
         int state = num - (current->Size() - current->getFrameIndex());
         //حالت بعدی قبلا به یکی از دو انیمیشن واسط یا بعدی ست شده است
         current = anims[nextstate];
         current->setFrameIndex(state);
         currentstate = nextstate;
         nextstate = -1;
      }
      else
         //اگر انیمیشن فعلی تمام نشده کار با همین انیمیشن ادامه می یابد
         current->IncFrame(num);
   }

   void NextFrame()            { IncFrame(1);     }
   //این سه تابع باعث میشوند تا در زمان ایتفاده از یک آبجکت کلاس در کد آن آبجکت
   //یک فریم که فریم قابل پخش فعلی است را برگرداند به این ترتیب میتوان از این
   //آبجکت در تماممی توابعی که یک عکس را میکشند استفاده کرد و به همین دلیل کار با این
   //کلاس بسیار ساده و لذت بخش خواهد شد
   operator SurfacePtr() const      { return *current; }
   operator SDL_Surface *() const   { return *current; }
   SDL_Surface *operator->() const { return *current; }

};


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

راستی یادم رفت که بگم اینم اول کدها مون هست

كد:

/***************************************************************************
 *   Copyright (C) 2006 by Bazisazan Group                                 *
 *   bazisazan@hotpop.com                                                  *
 ***************************************************************************/

Wink

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



اين نامه توسط eta در 4 شنبه 2 اسفند 1385 - 17:14 ويرايش شده است.
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

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


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


4 شنبه 2 اسفند 1385 - 17:09
پاسخ بصورت نقل قول
مصطفي سپهريان نوشته:
ايولا من هم همين مشكل رو دارم...
البته هنوز به اونقدر جلو نرفتم كه بخوام اين مشكل رو حل كنم ولي منظور شما رو نفهميدم آقا مجتبي...
مثلا كاراكتر ما يه چيزي تو مايه هاي همسايه جهنميه و ما مي خوايم حالا كه رو به سمت چپه روش رو بسمت راست برگردونه و به همون سمت بره... پس مسلما بايد براش يه انيميشن يا اسپريت اضافي در نظر بگيريم و براش يه كد بنويسيم كه اگر نيازي بود كه انيميشن اجرا بشه ابتدا انيميشن چرخش و بعد انيميشن اصلي...
خب همينطور كه ديديد راه حل من هم مثل اتاي عزيزه Very Happy


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

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

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

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


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


4 شنبه 2 اسفند 1385 - 17:15
پاسخ بصورت نقل قول
اتا جون مي بيم كه پير بازي سازي شدي!!! Very Happy Smile PDT_002 Laughing
خودم هم فكرش رو كردم كه چند تا لينك بدم...
راستي من كه فكر كنم راه حلم مثل ماله شما باشه...
به نظرم همينطور كه براي چپ و راست اسپريت مي سازيم بايد براي چرخش به چپ و راست هم اسپريت ساخت تا اون رو نشون بده.. Wink

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

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


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


4 شنبه 2 اسفند 1385 - 17:30
پاسخ بصورت نقل قول
نقل قول:
اتا جون مي بيم كه پير بازي سازي شدي!!! Very Happy Smile PDT_002 Laughing


آدم یاد میتی کمان میفته!!!

نقل قول:
راستي من كه فكر كنم راه حلم مثل ماله شما باشه...


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

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

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

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


 
پرش به:  


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


unity3d

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