Cocos2dxの自分用まとめ
タッチイベントの有効化
初期化
/* CCScene::init で実行 */ // タッチの有効化 setTouchEnabled(true); // シングルタップの場合 setTouchMode(kCCTouchesOneByOne); // マルチタップの場合 setTouchMode(kCCTouchesAllAtOnce);
シングルタップ時に呼び出されるイベント
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
使用例
// タップが開始されたときの処理(無いとエラーになる) bool GameScene::ccTouchBegan(CCTouch* pTouch, CCEvent* pEvent) { return true; } // タップが終了したときの処理 void GameScene::ccTouchEnded(CCTouch* pTouch, CCEvent* pEvent) { // タップポイント取得 CCDirector* pDirector = CCDirector::sharedDirector(); CCPoint touchPoint = pDirector->convertToGL(pTouch->getLocationInView()); // タップされたかどうか判定する要素 CCNode* pNode = this->getChildByTag(someTag); if (!pNode) return; // タップポイントが要素の範囲内かどうか判定 CCRect rect = pNode->boundingBox(); if (rect.containsPoint(touchPoint)) { // タップされた時の処理 } }
マルチタップ時に呼び出されるイベント
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);
画像の表示と削除
/* 画面サイズの取得 */ CCSize size = CCDirector::sharedDirector()->getWinSize(); /* 画像の作成 */ CCSprite* pCard = CCSprite::create("card.png"); /* 表示位置の設定(画面中央に配置) */ pCard->setPosition(ccp(size.width * 0.5, size.height * 0.5)); /* タグの指定 */ int someTag = 1; pCard->setTag(someTag); /* 画面への表示 */ this->addChild(pCard); /* タグで画像要素を取得 */ CCNode* pCard1 = this->getChildByTag(someTag); /* 画面から消す */ pCard1->removeFromParentAndCleanup(true);
文字の表示
/* 文字列の作成 */ int someNumber = 100; CCString* numberString = CCString::createWithFormat("number is %d", someNumber); /* ラベルを作成 */ CCSize size = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF* label = CCLabelTTF::create(numberString->getCString(), "Arial", 24.0); label->setPosition(ccp(size.width * 0.5, size.height * 0.5)); /* ラベルの表示 */ this->addChild(label);
メニューボタンの作成
ボタンの表示
void GameScene::makeMenuButton() { /* メニューボタンの作成 */ CCLabelTTF* label = CCLabelTTF::create("Touch me", "Arial", 24.0); CCMenuItemLabel* menuItem = CCMenuItemLabel::create(label, this, menu_selector(GameScene::tapSomeButton)); // ラベルとコールバック関数の指定 CCSize size = CCDirector::sharedDirector()->getWinSize(); menuItem->setPosition(ccp(size.width * 0.5, size.height * 0.5)); /* ボタンの所属するメニューの作成 */ CCMenu* menu = CCMenu::create(menuItem, NULL); menu->setPosition(CCPointZero); this->addChild(menu); }
コールバック関数の定義
void GameScene::tapSomeButton(CCNode* node) { // 画面遷移する CCScene* gameScene = (CCScene*)GameScene::create(); CCDirector::sharedDirector()->replaceScene(gameScene); }
処理の定期実行
/* 1秒毎に処理を実行 */ this->schedule(schedule_selector(GameScene::someFunc)); /* 処理の定期実行を解除 */ this->unschedule(schedule_selector(GameScene::someFunc));
永続データの読み書き
/* 永続データ管理要素の取得 */ CCUserDefault* userDefault = CCUserDefault::sharedUserDefault(); /* データの読み込み */ float score = userDefault->getFloatForKey("scoreKey", 0); //キー名とデフォルト値の指定 /* データの書き込み */ userDefault->setFloatForKey("scoreKey", 100); userDefault->flush(); //書き込みの実行
乱数の使用
srand((unsigned)time(NULL)); int i; switch (rand() % 3) { case 0: i = 0; break; case 1: i = 1; break; default: i = 2; break; }
シーンの再描画*1
CCDirector::sharedDirector()->replaceScene((CCScene*)GameScene::create());
*1:2013/9/27追記