もう一つやりたいのはフリック処理。
使用するハンドラはonTouchBeganとonTouchEndedの二つ。
タッチ開始の座標(sx,sy)とタッチリリースの座標(ex,ey)から、フリックの方向を求めるのですが、
上下左右の4方向だけだったら値の大小だけで良いかもしれませんが、
今回はアナログスティックの様な360°フリックの方向を出したいので、
ここでは三角関数を使用します。
アークタンジェント(tanの逆関数)を使用すれば、y/xから求めることができます。
関数名はatan2()です。
class SampleScene : public cocos2d::Scene
{
private:
cocos2d::Label* label;
cocos2d::Vec2 startPos, endPos;
auto listener1 = EventListenerTouchOneByOne::create();
listener1->onTouchBegan = [this](Touch* touch, Event* event)->bool
{
startPos = touch->getLocation();
return true;
};
listener1->onTouchEnded = [this](Touch* touch, Event* event)->bool
{
endPos = touch->getLocation();
double angle = atan2(endPos.y - startPos.y,endPos.x - startPos.x) * 180.0 / M_PI;
auto str = String();
str.appendWithFormat("angle %f", angle);
label->setString(str.getCString());
return true;
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, this);
atan2が返す値の単位はラジアンなので、これに×180/PIとすることで角度に変換できます。
よし、これで必要なことは一通りできたかな。