ساخت بازی Peggle Nights – بخش سوم

سلام

قسمت سوم این مقاله رو شروع میکنیم

در قسمت های قبلی در مورد دنیا و Body و … در باکس تو دی صحبت کردیم و بحث در مورد Fixture ها به این جلسه موکول شد.

Fixtures

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

مهترین ویژگی های یک Fixture عبارت است از :

Shape : شکل یک شی که میتواند چند ضلعی یا دایره باشد.

Restitution : میزان انعطاف پذیری یک شکل

Friction : میزان اصطکاک یک شی

Density : جرم حجمی یک شی.

خوب فرض کنید یک Body به صورت زیر بسازیم. همانطور که گفتیم هنوز Body ما موجودیت نداره ، شکل نداره، جرم نداره:

[cpp] b2BodyDef myBodyDef;
myBodyDef.type = b2_dynamicBody;
myBodyDef.position.Set(-10, 20);
b2Body* dynamicBody1 = m_world->CreateBody(&myBodyDef);
[/cpp]

خوب برای اینکه بتونیم به این Body موجودیت بدهیم برای آن یک Shape تعیین کنیم.

Shapes

اشکال ویژگی ای هستند که به Fixtureها نسبت داده میشوند و زمانی بدرد میخورند که دو شی به هم برخورد کنند. دون نوع شکل در Box2D داریم دایره و چند ضلعی . برای مثال برای این که به Body که دربالا تعریف کردیم شکل دایره را نسبت بدیم به صورت زیر عمل میکنیم:

[cpp] b2CircleShape circleShape;
circleShape.m_p.Set(0, 0); //position, relative to body position
circleShape.m_radius = 1; //radius

[/cpp]

خوب برای این کار مجبوریم که از کلاس   b2CircleShape یک شی بسازیم که در آن موقعیت این شکل نسبت به Body و همچنین شعاع این دایره را تعیین میکینم.  خوب تاحالا یه Body ساختیم و شکل این Body را هم تعریف کردیم . حال چطور این دو را به هم مرتبط کنیم:

[cpp] b2FixtureDef myFixtureDef;
myFixtureDef.shape = &circleShape; //this is a pointer to the shape above
dynamicBody1->CreateFixture(&myFixtureDef); //add a fixture to the body
[/cpp]

با ساختن یک شی از کلاس   b2FixtureDef برای ساختن Fixture هم تعریفی آماده میکنیم. در این صورت شکل دایره ای که قبلا ساختیم را به آن نسبت میدهیم. و در ضمن برای نسبت دادن این دو یعنی Body و Fixture از تابع CreateFixture کلاس Body استفاده میکنیم . الان این شی در مراحل شبیه سازی که توسط b2World ما انجام میشه شرکت داده میشه و در هر لحظه Position و سایر مشخصاتش بیان میشه.

پس برای ساختن یک شی مراحل زیر رو طی میکنیم:

  1. یک سری تعریف کلی که مربوط به تمام شی هست رو در شی ای از کلاس b2BodyDef تعیین میکنیم. خوبی این روش اینه که میتونیم چندین Body از BodyDef ای که داریم بسازیم.
  2. بعد از آن از کلاس b2FixtureDef استفاده میکنیم و مشخصات خاص قسمتی (تمام) شی رو بیان میکنیم . این که جرمش چقدره، شکلش چه جوریه و چیزای دیگه.
  3. و بعد Fixture و Body رو با تابع CreateFixture عضو Body به هم مرتبط میکینم.

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

۱,۵۶۲ total views, 3 views today

Print Friendly, PDF & Email

درباره ی سعید دادخواه

یه برنامه نویس !

همچنین ببینید

ریزه میزه – دسترسی به عناصر یک tuple

سلام دوستان گل. من سعی میکنم با توجه به وقت کم من و شما مطالب …

دیدگاه بگذارید

avatar
  مشترک شو!  
میخوام باخبر شم از