0

我正在 cocos2d 中制作一个简单的物理游戏,并希望在滑动时以滑动的速度发射一个粒子。为了获得速度,我需要进行两次触摸并确定(位置差异)/(时间戳差异)。我的问题是我无法进行两次触摸。我尝试了几种方法,但都没有奏效。

我尝试存储第一次触摸

@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 获得最后两次触摸?

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...如果你想按照你的方法基于结尾。所以你需要跟踪你的手指在里面的移动ccTouchesMoved:;然后在 touchesEnded 中判断是水平还是垂直滑动,方向,并发出子弹。

希望这些建议中的任何一个都可能有所帮助。

于 2013-01-04T18:35:35.673 回答