3

この cocos2d-iphone コードを cocos2d-x に移植するにはどうすればよいですか?

(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event  {
 NSSet *allTouches = [event allTouches]; 
switch ([allTouches count])    {
case 1:  
    {
        UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
        switch([touch tapCount]) 
        { 
             case 1:
                  // 单击!
                 break;
             case 2:
                //Double tap.
               // 双击! 
                break;
        } 
   break;    
   } 
}
4

3 に答える 3

7

これを実装する関数はありません。2 回のクリック間のティックをテストすることで実装できます。一般に、ダブルクリックの時間間隔は 250ms から 300ms です。これを使用して、システムの現在のミリ秒数を取得します。

long millisecondNow()
{
    struct cc_timeval now;
    CCTime::gettimeofdayCocos2d(&now, NULL);
    return (now.tv_sec * 1000 + now.tv_sec / 1000);
}
于 2012-11-30T08:39:57.820 に答える
0

MyScene.h で、次のように宣言します。

int tapCount;
Touch lastTouch;
void singleTap(float deltaTime);

次に MyScene.cpp で:

bool MyScene::onTouchBegan(Touch* touch, Event* event)
{
    ++tapCount;
    lastTouch = *touch;

    if (tapCount == 1) {
        this->schedule(schedule_selector(MyScene::singleTap), 0.25, 1, 0);
    }
    else {
        this->unschedule(schedule_selector(MyScene::singleTap));
        tapCount = 0;
        printf("\n\ndouble tap\n\n");
    }

    return true;
}


void MyScene::singleTap(float deltaTime)
{
    this->unschedule(schedule_selector(LevelScene::singleTap));
    tapCount = 0;
    printf("\n\nsingle tap\n\n");
}

その後、singleTap または doubleTap メソッドで lastTouch にアクセスできます。lastTouch を Touch オブジェクトにする必要がない場合は、Vec2 を使用して座標を設定できます。デバイスでは、タイマー間隔 (0.25) の方が正確であることに注意してください。間隔は実際には壁時計の時間ではないため、シミュレーターには遅延があります。

于 2015-05-29T17:09:10.000 に答える