LoginSignup
34
34

More than 5 years have passed since last update.

cocos2d-xの勉強を始めたのでメモがてら書く

Last updated at Posted at 2014-07-03

01画面大きさと原点

// 画面の幅を取得
Size visibleSize = Director::getInstance()->getVisibleSize();
// 原点を取得
Point origin = Director::getInstance()->getVisibleOrigin();

最初作ったら勝手に出来るけども今後座標の指定の時にこの変数を使ったりするので一応

02Sprite表示

画像を表示する。

//Spriteクラスを初期化
Sprite *sprite = Sprite::create("sample.png");
//座標を指定
sprite->setPosition(Point(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
//レイヤーに追加
this->addChild(sprite);

03文字表示

文字を表示する。

//Labelクラスの初期化
Label *label = Label::create("文字列だよ", "Arial", 24);
//座標を指定
label->setPosition(Point(tyuuou.width + visibleSize.width / 2,
                         tyuuou.height + visibleSize.height - label->getContentSize().height));
//文字列を作る
String *str = String::createWithFormat("Score : %d", score);
//作ったもし列をLabelに設定
label->setString(str->getCString());
//シーンに追加
this->addChild(label);

04クリック

タッチとクリックは同じ事。

// イベント
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);// クリックした
listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);// ドラッグしている
listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);// クリックを離した

auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->addEventListenerWithSceneGraphPriority(listener, this);

05Sprite動かす

表示したSpriteをクリックした座標に動かす方法。

//onTouchBeganの中で
//タッチした座標を取得
Point location = touch->getLocation();
//アクションを止める
sprite->stopActionByTag(1);
//動きの設定
MoveTo* move = MoveTo::create(10.0f, Point(100, 100));  //引数は目的座標に到達するまでの時間と目的座標
//アクションを止める時ようにタグに設定
move->setTag(1);  //この『1』がstopActionByTag(1)の『1』になる
//アクションの開始
sprite->runAction(move);

06ゲームループ

ゲームループ用の毎フレーム実行される部分。
中で使用する変数などは.hに書くかタグを使う

//init()の中で
this->scheduleUpdate();

//新たな関数:update(float delta)を.hと.cppに書き込む
//.h
void update(float delta);
//.cpp
void HelloWorld::update(float delta) {
  //更新処理
}

07衝突判定

cocos2d-xにはあたり判定が2通りある
①点と矩形(PointとRect)

Point point = touch->getLocation(); //クリック座標
Rect  rect; = sprite->boundingBox(); //画像の大きさの矩形

if(rect.containsPoint(point)){
//当たった(true)場合の処理
}

②矩形と矩形(RectとRect)

Rect rect  = sprite->boundingBox();  //画像の大きさの矩形
Rect rect2 = sprite2->boundingBox();  //画像2の大きさの矩形

if(rect.intersectsRect(rect2){
//当たった(true)場合の処理
}

08タグ

自分の印象だとJavaのArrayListみたいな感覚?
『タグを設定する』『タグを調べる』『タグを指定して呼び出す』の3つの事ができる。
①タグを設定する

sprite->setTag(1);  //spriteに『1』と言うタグを設定する

②タグを調べる

int tag = sprite->getTag();  //spriteにはどの様なタグが設定されているか調べる

③タグを指定して呼び出す

auto sprite = this->getChildByTag(1);  //タグが『1』と設定してあるデータを呼び出す
34
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
34