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





صفحه اول انجمنها -> اصول اولیه در طراحی بازیهای کامپیوتری -> ++C به علاوه SDL میشه یه بازی خوب
 

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

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


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


3 شنبه 6 آذر 1386 - 23:56
پاسخ بصورت نقل قول
در مورد سرعت تستش كردم . درست كار كرد . حالا نمي دونم كد بهتري هم وجود داره يا نه ...

در مورد استاتيك : تا اونجا كه يادم مياد استاتيك يعني يك بار مقدار مي داديم و بعد ديگه مقدارش تغيير نمي كرد . ولي خوب منظورت رو از سوالت نفهميدم !
هر آبجكتي يك collisionGoroup و collisionLayer داره كه موقع ساخت اشياي جديد همون جا مقدارش رو مي دم ...

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

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


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


5 شنبه 8 آذر 1386 - 18:26
پاسخ بصورت نقل قول
همون منظورم همین بود که مقدارشون هی عوض میشه یا نه که جوابم رو گرفتم.
ایده خوبیه.
به نظر قابلیت استفاده در بازیهای شبه سه بعدی رو هم داره.

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

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

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


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


5 شنبه 8 آذر 1386 - 23:50
پاسخ بصورت نقل قول
خوب طبق كد من مشكلي براي عوض كردنش نيست و مي شه بعضي جاها از اين امكان استفاده هم كرد پس وقتي اول ساخت مشخص مي كنم مي شه بعدا هم تغييرش داد ...

ممنون . اين اولين ايده اي بود كه براي كمتر كردن ميزان گشتن بين اجسام به ذهنم رسيد . در واقع من دو الگوريتم جداگانه درنظر گرفتم يكي دو آبجكتي كه بايد با هم برخورد كنند رو پيدا مي كنه و دومين الگوريتم ( collisiontest ) چك مي كنه كه آيا دو آبجكت روي هم هستند يا خير ...
البته من از يكي از دوستان شنيدم كه مثلا توي tgb به اين صورت نيست كه در هر فريم برخورد چك بشه ... انجين از الگوريتم هايي استفاده مي كنه كه برخورد رو قبل از اينكه دو شي به هم برسند چك مي كنه پس احتمال اين هست كه در اين نوع انجين ها مثل من از دو الگوريتم جداگانه استفاده نكرده باشند ...

احسان يه مشكل بزرگ دارم ! من با دستور حركتي كه ساختم اشيا رو مي تونم حركت بدم ولي وقتي به ته صفحه مي رسه گير مي كنه و مقدار x و y از صفر كمتر نمي شه ! البته اين مشكل فقط براي كناره هاي بالا و چپ صفحه پيش مياد و اشيا از قسمت راست و پايين صفحه رد مي شند ومشكلي ندارند ...
جالب اينه كه وقتي يك مقدار خاص منفي به x يا y مي دم درست كار مي كنه ولي اگه تو يه حلقه و مرتبا اين كار رو انجام بدم گير مي كنه .
براي توضيح بيشتر :
به اين كد نگاه كن كه تو حلقه اصلي مي ذارم :
offset.x = -10
خوب اين درست كار مي كنه ... حالا فقط همين كد رو به شكل زير عوض مي كنم :
offset.x -= 1
آبجكت به سمت چپ حركت مي كنه و وقتي به انتهاي صفحه رسيد بي حركت مي مونه !!!

اگه تو هم تابعي براي حركت در نظر گرفته تست كن ببين گير مي كنه يانه ؟؟

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

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


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


شنبه 10 آذر 1386 - 22:00
پاسخ بصورت نقل قول
نه ما هرگز همچین مشکلی نداشتیم.
ما یه موتور گرافیک داشتیم و یه موتور بازی و یه دنیا(WORLD) سایز دنیا می تونست بزرگتر از سایز صفحه نمایش هم باشه و بنابراین می شد توش اسکرول کنیم. اما این مشکل هیچ وقت پیش نیومد.
اگه میشه بیشتر کد بذار تا اینجاش که مشکلی نمیبینم.

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

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

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


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


2 شنبه 19 آذر 1386 - 13:34
پاسخ بصورت نقل قول
من یادم رفت جواب پستت رو بدم !
به عنوان کد بیشتر کل پروژه رو آپ کردم می تونی خودت ببینی :
http://rapidshare.com/files/75562817/Engine.zip.html

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

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


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


5 شنبه 22 آذر 1386 - 11:53
پاسخ بصورت نقل قول
بعد از دو سه ساعت زور زدن بالاخره فهمیدم. کمی هم یادم رفته بود.

ایراد از اینه :
كد:

int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);


Description
This performs a fast blit from the source surface to the destination surface.

Only the position is used in the dstrect (the width and height are ignored).

If either srcrect or dstrect are NULL, the entire surface (src or dst) is copied.

The final blit rectangle is saved in dstrect after all clipping is performed (srcrect is not modified).

The blit function should not be called on a locked surface.




اینجاش :
كد:

The final blit rectangle is saved in dstrect after all clipping is performed (srcrect is not modified).



تو توی اینجا offset رو خراب می کنی:
كد:

void sprite::draw(SDL_Surface* screen)
{
   // for Move
   sceneNode::draw(screen);

    //Blit
   SDL_BlitSurface( mySprite, NULL, screen, &(sceneNode::offset) );
}


و
كد:

void animSprite::draw(SDL_Surface* screen)
{
   if ( ( ::SDL_GetTicks() - lastT) >= unsigned(1000 / fps) ) {
      if ( (loop && frameN <= frameTotalNumber) || (!loop && frameN < frameTotalNumber) ) {
         frameN++;
      }
      if ( frameN > frameTotalNumber )
         frameN = 0;

      int N_Cframe = mySprite->w / frameWidth;
      frameRect.x = ( frameN - frameN / N_Cframe * N_Cframe ) * frameWidth;
      frameRect.y = ( frameN / N_Cframe ) * frameHeight;
      lastT = ::SDL_GetTicks();
   }
   
   // for Move
   sceneNode::draw(screen);

    //Blit
   SDL_BlitSurface( mySprite, &frameRect, screen, &offset );
}



یه ذره مطالعه کن فرزندم!!! Smile Very Happy

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

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

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


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


5 شنبه 22 آذر 1386 - 15:13
پاسخ بصورت نقل قول
چه مسخره !
نمي دونم اين چه سودي مي تونه داشته باشه . شايد هم من فعلا سر در نميارم ولي به نظرم خيلي مسخره هست كه x و y از offset رو خودش تغيير بده و اون هم وقتي منفي بشند !!!

به هر حال من اين كد رو نوشتم و فعلا مشكلم حل شد :

كد:
   test = offset;
   SDL_BlitSurface( mySprite, &frameRect, screen, &offset );
   offset = test;


اونجا هم كه نوشتي تو اينجا offset رو خراب كردي متوجه نشدم . پس براي draw بايد چه كار كنم ؟؟!
مرسي

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

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


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


5 شنبه 22 آذر 1386 - 16:17
پاسخ بصورت نقل قول
خوب یعنی همون که گفتی دیگه توی اون دو قسمت offset تغییر می کنه.
ببین وقتی یه تابع مغر رو به صورت رفرنس می گیره یعنی میخواد عوضش کنه. هواست باید به این جور چیزها باشه. گذشته از این ممکنه شما به این مقدار که تابع تغییر میده نیاز داشته باشی. از اون جایی که توی ++C چند مقدار بازگشتی پشتیبانی نمیشه. معمولا از پارامترهای تابع برای این منظور استفاده می کنند.

راستی تو کد بالا اگه از test برای پارامتر dstRect استفاده کنی دیگه نیازی نخواهی داشت که دوباره offset رو با مقدار test پر کنی. یعنی یه انتساب اضافه نوشتی.

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

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

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


 
پرش به:  


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


unity3d

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