0

cocos2d で簡単な物理ゲームを作成しており、スワイプの速度でパーティクルを発射したいと考えています。速度を取得するには、2 回タッチして (位置の差)/(タイムスタンプの差) を求める必要があります。私の問題は、2回タッチできないことです。いくつかの方法を試しましたが、どれもうまくいきません。

ファーストタッチを保存してみた

@property (nonatomic, strong) UITouch *firstTouch;

...

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    [self setFirstTouch:touch];
    NSLog(@"first touch time 1: %f", self.firstTouch.timestamp);
}


-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    NSLog(@"touch ended");
    NSLog(@"first touch time 2: %f", self.firstTouch.timestamp);
    NSLog(@"end of touch time: %f", touch.timestamp);
}

しかし、これにより毎回タイムスタンプの差が0になります。firstTouch を最新のタッチに置き換えるようです

これが置き換えられたポインターに何か問題がありますか?

おそらく、ccTouchesMoved から最後の 2 つのタッチを取得できますか?

4

1 に答える 1

6

あなたがやろうとしていることを行うためのはるかに簡単な方法は、 を追加してUIPanGestureRecognizerから、ジェスチャ認識エンジンのプロパティを[CCDirector sharedDirector].openGLView使用することです。velocityInView

UIPanGestureRecognizer* gestureRecognizer = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)] autorelease];
[[CCDirector sharedDirector].openGLView addGestureRecognizer:gestureRecognizer];

その後:

- (void)handleSwipe:(UIPanGestureRecognizer*)recognizer {
    ... recognizer.velocity...
}

に基づいてアプローチしたい場合ccTouches...は、スワイプジェスチャについて誤解がある可能性があると思われます.2回のタッチで構成されているわけではありません.開始、いくつかの動き、および終わり。したがって、指の動きを追跡する必要がありますccTouchesMoved:。次に、 touchesEnded で、それが水平スワイプか垂直スワイプか、方向を判断し、弾丸を送り出します。

これらの提案のいずれかが役立つことを願っています。

于 2013-01-04T18:35:35.673 に答える