vaguely

和歌山に戻りました。ふらふらと色々なものに手を出す毎日。

2Dでゲームを作ってみる

やっぱり言語は使ってみないとなかなか身に付かないですよね。

ということで、openFrameworksを使ってブロック崩しゲームを作ってみることにします。

内容は画面下部のパッドを操作してボールを弾き、画面上部にあるブロックを崩す、というもの。

メイン画面は前回(iOSでopenFrameworks)と同じで、3Dオブジェクトをロードしていた画面を今回新たに作成します。

まずはパッドを作ります。

【PlayApp.mm】

float fltPadX;

void PlayApp::setup() {
    ofSetLogLevel(OF_LOG_VERBOSE);
    ofBackground(200, 200, 250);
    fltPadX = (float)ofGetWidth()/2;
}

//--------------------------------------------------------------
void PlayApp::draw() {
    ofSetColor(0, 0, 0);
    ofRect(fltPadX , (float)ofGetHeight() - 30 , 30, 10);
}

//--------------------------------------------------------------
void PlayApp::touchDown(ofTouchEventArgs &touch){
    followMousePosition();
}

//--------------------------------------------------------------
void PlayApp::touchMoved(ofTouchEventArgs &touch){
    followMousePosition();
}
void PlayApp::followMousePosition(){
    fltPadX = mouseX;
}

縦(Y座標)の位置は固定なので、横(X座標)のみ変更できるようにします。

複数の図形を表示する

表示は[PlayApp::draw()]で行いますが、複数の図形を使用したい場合、UnityのGameObjectのようにインスタンスを作成するということができないので(多分)以下のように書くことになります。

ofSetColor(0, 0, 0);
ofRect(0,0,10,10);
ofSetColor(10, 10, 10);
ofRect(15,15,10,10);

タップしたときにパッドを移動させる

[PlayApp::touchDown]で画面をタップした位置のX座標に移動させて、そのまま左右に動かしたときに追従するよう[PlayApp::touchMoved]に記述しています。

if文でY座標の位置が画面半分より下かどうかを見ても良さそうです。

if((float)ofGetHeight() /2 < mouseY){
fltPadX = mouseX;
}

次はボールを作ってみたいと思います。

【参考】