Cocos2d-x ゲーム制作

ゲーム制作 Cocos2d-x関連 第5回 「ボールを動かそう」

投稿日:2016年7月2日 更新日:

今回はCocos2d-xのupdateメソッドでボールを動かしていきます。

 

さて前回の続きですが、

  1. ボールをタップすると矢印画像を表示する。
  2. そのままタップを移動することで、矢印画像を360度回転できる。
  3. タップを離すとボールが指定された角度で移動する。矢印画像は削除する。

 

という3つの仕様がありました。残っているのは仕様3の「タップを離すとボールが指定された角度で移動する。」というところです。

 

プログラム実装

それではプログラムを記述していきましょう。以下のコードを追加してください。

HelloWorldScene.h

    void update(float dt);
    int _speed = 50;
    bool _isBallMoving = false;

 

 

HelloWorldScene.cpp HelloWorld::init

scheduleUpdate();

 

 

HelloWorldScene.cpp HelloWorld::update

void HelloWorld::update(float dt){
    if(_isBallMoving){
        float x = _ball->getPosition().x - _speed*cosf(CC_DEGREES_TO_RADIANS(_degree));
        float y = _ball->getPosition().y + _speed*sinf(CC_DEGREES_TO_RADIANS(_degree));
        _ball->setPosition(Vec2(x, y)); 
    }
}

 

 

HelloWorldScene.cpp HelloWorld::onTouchEnded

void HelloWorld::onTouchEnded(Touch* pTouch, Event* pEvent){

    if(_allow != nullptr){
        _allow->removeFromParent();
        _allow = nullptr;
    }
    _isBallMoving = true;
}

※前回のonTouchEndedに、ハイライトしている7行目を追記して下さい。

・update
cocos2dxのメソッドで、デフォルトではユーザの操作有無に関わらず、1/60秒毎に実行されます。この中でボールの位置座標を更新することでボールが動いているように見えます。

 

 

プログラム解説

ボールの移動処理

画面をタップした際に角度を取得します。取得した角度にスピードとCos、Sinで計算して得られたX軸方向の移動量、Y軸方向の移動量を、updateメソッド内でボールの座標に加減算することでボールの移動が可能になります。
updateは1/60毎に実行されます。この1/60秒はよくフレームと呼ばれます。他のゲームやテレビも、フレーム毎に画面を更新することで動きを表現しているわけです。

 

ボールの移動タイミング

「_isBallMoving」フラグを定義してタップを放した際にtrueにします。そうすることで、タップを放したタイミングでupdate内部の処理が有効になり、ボールの移動が可能となります。

 

 

シミュレータの起動

それではシミュレータを起動しましょう。

5_sc_simu

土星に向けてスイングバイ!どうでしょうか。ボールが移動したかと思います。そしてそのまま画面外へ・・・

 

次回はボールを画面外に飛ばさないようにしたいと思います。

 

 

次回

第6回 「画面端でのボールの跳ね返り」

 

PrainGoogleAdSense

PrainGoogleAdSense

-Cocos2d-x, ゲーム制作
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

シミュレータ

ゲーム制作 Cocos2d-x関連 第3回 「画像の表示処理 解説」

今回はCocos2d-xにおける画像表示コードの解説です。   画像表示処理の解説 前回 第2回 「Cocos2d-xで作ろう!!~画像の表示処理」 の続きです。   先ほどの画像 …

状態遷移

ゲーム制作 Cocos2d-x関連 第13回 「ゲームの状態(プレイヤーのターン 敵のターン、etc・・・)の実装」

ゲームの操作感がわかってきたところで、ゲーム全体の流れの大枠を作っていきましょう。     今回のゲームはターン制を想定しています。つまり、プレイヤーのターンと敵のターンです。 な …

三平方の定理

ゲーム制作 Cocos2d-x関連 第7回 「ボールとドロップとの衝突検知と跳ね返り」

今回はボールとドロップとの衝突検知を実装してきます。   前回はボールと画面端との衝突判定と跳ね返りのプログラムを行いました。   画面端であれば上下左右の4通りの検知を行えばよか …

パワーゲージ

ゲーム制作 Cocos2d-x関連 第10回 「パワーゲージによるボール移動距離の強弱付け」

コレは、・・・アレです。動くゲージをどこで止めるかによって、ボールの移動距離が変わるやつです。     パワーゲージの実装方法検討 パワーゲージの実装方法ですが、   パ …

マップイメージ

ゲーム制作 Cocos2d-x関連 第14回 「プレイヤー攻撃によるダメージ計算、ターン交代」

今回はプレイヤーのターン、敵のターンを交互に行うようにしていきます。また、それぞれのターンで相手に攻撃を行い、ダメージ計算もしていきます。       ターン交代の仕様 …