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

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

関連記事

cocos2dx

Cocos2d-x サーバ側の処理とデータ送信(Httpレスポンス)

この記事は「Cocos2d-x セーブデータをサーバに送信して保存する」の続きになります。 ・第1回 : サーバにデータを保存したい理由と全体の流れ ・第2回 : クライアント側の処理とデータ送信(H …

スプライトシート作成

Cocos2d-x スプライトシートを作成して画像を楽に管理したい

Cocos2d-x スプライトシートを作成して画像を楽に管理したい この記事では、スプライトシートの作成方法と、スプライトシートを利用することのメリットについて紹介します。     …

cocos2dx

Cocos2d-x クライアント側の処理とデータ送信(Httpリクエスト)

この記事は「Cocos2d-x セーブデータをサーバに送信して保存する」の続きになります。   ・第1回 : サーバにデータを保存したい理由と全体の流れ ・第2回 : クライアント側の処理と …

アプリ 購入画面

Cocos2d-x SDKBoxを使ってアプリ内課金をするやり方 プログラム実装~実機テストまでの13の手順

この記事では、Cocos2d-xのSDKBoxを利用したiOSアプリ内課金のプログラム実装から実機テストのやり方まで、一連の流れで説明します。     アプリ課金の実機テストを、実 …

三平方の定理

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

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