[cocos2d] ゲーム開発日誌part14 ブーメランの実装

[cocos2d] ゲーム開発日誌part14 ブーメランの実装
   

アクションRPGの定番であるブーメランをcococs2dを使って表現できるかどうかを考えていました。

考え方

ブーメランを表す専用のクラスを作り、Playerが攻撃のボタンを押した際にブーメランをインスタンス化して動かします。

スクリーンショット 2012 05 18 21 17 34

ブーメランを表すクラス

このクラス内で、ブーメランの回転と移動を設定します。

ブーメランの回転

ブーメランの回転にはCCActionのCCRepeatForeeverを使います。
私は初期化の段階で設定をしています。こんな感じです。
- (id)init {
    self = [super init];
    if (self) {
                
        
        sprite = [CCZSprite spriteWithFile:@"bumeran.png"];
        [self addChild:sprite];
        
        //回転させる
        [sprite runAction:[CCRepeatForever actionWithAction:[CCRotateBy actionWithDuration:0.4f angle:360]]];
        
        
    }
    return self;
}

移動

移動に関してはどうするか非常に苦労をしました。
私の考えるブーメランとはこんな感じです。

基本的なブーメランの移動について
一定の距離まで行って帰ってくる動きは、時間によって管理することにしました。
コードで表すとこんな感じです。
-(void)update:(ccTime)delta{
   time  = time + delta;

    if (time < 0.75f) {

         //行きの動き>
                      
        }else{
     
     //帰りの動き

        }


update内で一庭の時間が過ぎれば、移動の量や方向を変化させます。
壁やオブジェクトに当たったときには、timeを調整しすぐにPlayer方向に帰ってくるようにします。

自機(Player)クラスでのブーメラン処理

これに関しては共にCCActionクラスを組み合わせてタイミングなどを調節します。
特にどの方向にブーメランを生成するかが肝になるのですが、私は自機の方向かたブーメランの移動方向を決めています。
こんな感じです。
-(CGPoint)attackPosition{
    
    CGPoint vecter;
    //currentDirectionがキャラクターの方向
    if (currentDirection == 0) vecter = ccp(0,-32);
    if (currentDirection == 1) vecter = ccp(-32,0);
    if (currentDirection == 2) vecter = ccp(-32,0);
    if (currentDirection == 3) vecter = ccp(-32,0);
    if (currentDirection == 4) vecter = ccp(0,32);
    if (currentDirection == 5) vecter = ccp(32,0);
    if (currentDirection == 6) vecter = ccp(32,0);
    if (currentDirection == 7) vecter = ccp(32,0);
    
    return vector;
}

デモ動画

以前から少しづつ考えて作っていたのですが、結構うまくできたと個人的に思っています。
いかがでしょうか?

Related Posts Plugin for WordPress, Blogger...
photo by: cogdogblog