長くても一週間ぐらいで流すつもりだったこのチュートリアル…気づいたら、はや一ヶ月間以上費やしている… orz
タップして kickを実行… よしやろう… ^^;
まずは init()で タップの操作を可能に…
//タップ操作(シングルタップ) { ccTouchesMode mode = kCCTouchesOneByOne; this->setTouchMode(mode); this->setTouchEnabled(true); }
いつものように CCLayer.h から 定義をコピって来て、HelloWorld.h に張り付けて…
protected: virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
HelloWorld.cpp で実装…と。ついでに座標からボールの位置をしらべて、ボールをタップしていたら…にしてみよう。というわけで、ccTouchBegan はこんな感じに。
bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { CCPoint position = pTouch->getLocation(); CCLOG("%s x:%f, y:%f", __PRETTY_FUNCTION__, position.x, position.y); this->kick(position); return true; }
前回の kick() を改造だなー ^^
まずは引数で CCPoint を取れるように定義を修正し、bodydef の userData に関連づけておいた CCSprite を参照して CCRect の当たり判定を試してみた。
void HelloWorld::kick(CCPoint position) { for (b2Body * b = _world->GetBodyList(); b; b = b->GetNext()) { bool check = false; { CCSprite * ball = (CCSprite *)b->GetUserData(); if (ball) { //当たり判定 check = ball->boundingBox().containsPoint(position); } } //ボールをタップしていれば if (check) { float angle = CC_DEGREES_TO_RADIANS(b->GetAngle()); const float distance = 200.0f; b2Vec2 force = b2Vec2(distance * cos(angle) - distance * sin(angle), distance * sin(angle) + distance * cos(angle)); b->ApplyLinearImpulse(force, b->GetPosition()); } } }
とりあえずこんなっ感じで…チュートリアルは卒業…? ^^;
まぁ次いこうww ^^;
次はコレかなー
How To Create A Breakout Game with Box2D and Cocos2D 2.X Tutorial: Part 1