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関連 第11回 「音楽、効果音を鳴らす」

いつになったらゲームで音楽を流せるようになるの~   最初に書籍でcocos2dxの勉強をしていた時、こんなことを思っていた気がします・・・     今回はサウンド関連で …

cocos2dx

Cocos2d-x Http通信の完了に同期して処理を実行する

  こんにちは、akiです。 この記事ではHttp通信処理の完了に同期して任意の処理を実行するやり方を説明します。 やり方は簡単でHttp通信のコールバックの中にカスタムイベントを発行する処 …

ゲーム制作 Cocos2d-x関連 最終回 「勝利演出、敗北演出の追加」

勝利演出、敗北演出を実装していきます。今回で最終回です!     仕様の検討 1.バトル中、プレイヤーのHPが0になった場合 → 勝利演出 → 勝利演出中に画面をタップするとスター …

Cocos2d-x モーダルレイヤーの作り方

この記事ではCocos2d-xによるモーダルレイヤー実装のやり方について説明します。     モーダルレイヤーとは モーダルとは操作が完了するまで親への操作を受け付けなくさせるとい …

遊びを繋げ新たな地平へ プレイン Prain

ゲーム制作 Cocos2d-x関連 第9回 「移動しているボールの減速」

この辺りで大体折り返し地点です。   さて、弾いたボールはだんだんと減速していくようにしましょう。色々なやり方があるかと思いますが、今回はシンプルにupdateの中でカウンタを回して、一定回 …