長くても一週間ぐらいで流すつもりだったこのチュートリアル…気づいたら、はや一ヶ月間以上費やしている… 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