آموزش برنامه نویسی ios: طراحی بازی مشابه بازی انگری برد (قسمت دوم)

آموزش برنامه نویسی ios: طراحی بازی مشابه بازی انگری برد (قسمت دوم)

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

اضافه کردن برخی اجزای فیزیکی به محیط بازی

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

بیایید با پرنده شروع کنیم شکل فیزیکی پرنده را با یک دایره نشان می دهیم:

_bird = [SKSpriteNode spriteNodeWithTexture:birdTexture1];

[_bird setScale:2.0];

_bird.position = CGPointMake(self.frame.size.width / 4, CGRectGetMidY(self.frame));

[_bird runAction:flap];

 

_bird.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:_bird.size.height / 2];

_bird.physicsBody.dynamic = YES;

_bird.physicsBody.allowsRotation = NO;

 

[self addChild:_bird];

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

// Create ground physics container

 

SKNode* dummy = [SKNode node];

dummy.position = CGPointMake(0, groundTexture.size.height);

dummy.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(self.frame.size.width, groundTexture.size.height * 2)];

dummy.physicsBody.dynamic = NO;

[self addChild:dummy];

توجه داشته باشید فقط ویژگی حرکتی (property dynamic) پرنده Yes می باشد  و باقی عناصر No می باشند دلیل آن این است که فقط پرنده با محیط اطرافش در ارتباط و تعامل است و باقی عناصر ثابت و تحت کنترل ما هستند.

با اعمال این تغییرات می بینید که پرنده در حال سقوط به سمت زمین می باشد.

 

با توجه به تصویر بالا می بینید که پرنده با سرعت زیادی سقوط می کند که این مطلوب نیست، برای کنترل این رفتار ساده ترین کار تغییر گرانش محیط بازی می باشد.

با استفاده از کد زیر می توان این مقدار را تغییر داد :

self.physicsWorld.gravity = CGVectorMake( 0.0, -5.0 );

این کد جاذبه را از مقدار 9.8 m/s به اندازه 5 m/s کاهش می دهد و در نتیجه پرنده با سرعت کمتری به سمت زمین حرکت می کند.

برای اینکه بخواهیم با ضربه زدن روی بدن پرنده، به سمت بالا حرکت کند. می توان قطعه کد ساده زیر را نوشت:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    /* Called when a touch begins */

    [_bird.physicsBody applyImpulse:CGVectorMake(0, 8)];

}

که نتیجه آن بصورت زیر می شود:

 

می توان چرخش پرنده را نسبت به سرعت آن تنظیم کرد که برای اینکار کد زیر را می نویسیم:

CGFloat clamp(CGFloat min, CGFloat max, CGFloat value) {

    if( value > max ) {

        return max;

    } else if( value < min ) {

        return min;

    } else {

        return value;

    }

}

 

-(void)update:(CFTimeInterval)currentTime {

    /* Called before each frame is rendered */

    _bird.zRotation = clamp( -1, 0.5, _bird.physicsBody.velocity.dy * ( _bird.physicsBody.velocity.dy < 0 ? 0.003 : 0.001 ) );

}

همانطور که می بینید  با استفاده از ویژگی های فیزیکی بدن پرنده و با استفاده از velocity ظاهر فیزیکی حرکات را شبیه سازی کردیم و با اضافه کردن تابع clamp مانع  بیش از حد زیاد شدن حرکات در هرجهتی شدیم، دقت کنید که کمترین و بیشترین مقادیر این تابع (-1,0.5) می باشد.

 

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

 

بعدی         قبلی

1891

بلاگ های مرتبط

ثبت نظر جدید

Retype the CAPTCHA code from the image
Change the CAPTCHA codeSpeak the CAPTCHA code
 

نظرات کاربران

آیا سوالی دارید ؟

با تلگرام 09108454545 و یا با ایمیل آدرس ایمیل سروش پرداز تماس برقرار کنید.

برای تماس با مشاورین میتوانید با شماره های 22827258-021 و 22827257-021 تماس حاصل فرمایید همچنین برای تسهیل در ارتباطات میتوانید با تلگرام شرکت به شماره 09108454545 تماس بگیرید.


logo-samandehi