cocos2d ccTouchEnded:删除一个Touch

这些是我的ccTouch_ _方法。 请注意,我正在使用函数的单数forms(即。ccTouchBegan诉ccTouchesBegan(不知道这是否与它有任何关系,但它不能伤害指出))。

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{ //NSLog(@"1"); CGPoint touchLocation = [GameScene locationFromTouch:touch]; CTouch* newTouch = [[CTouch alloc] initWithStart:touchLocation]; [touches addObject:newTouch]; //Right now the UILayer takes all touch events and handles them return YES; } -(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event{ //NSLog(@"2"); //Get the touch's location and previous location CGPoint touchLocation = [GameScene locationFromTouch:touch]; CGPoint lastTouchLocation = [GameScene previousLocationFromTouch:touch]; //Check which CTouch has been moved and move it for (CTouch* ct in touches){ if ([ct checkSameTouch:lastTouchLocation]) { [ct setCurrentPosition:touchLocation]; } } } -(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event{ NSLog(@"3"); //Get the touch's location CGPoint touchLocation = [GameScene locationFromTouch:touch]; CGPoint lastTouchLocation = [GameScene previousLocationFromTouch:touch]; //The CTouch object to be removed //You can't remove an object from the array while its being enumerated CTouch* removeTouch; //Check and hold which CTouch has ended for (CTouch* ct in touches){ if ([ct checkSameTouch:lastTouchLocation]) { removeTouch = ct; } } //Remove the touch [touches removeObject:removeTouch]; } 

出于某种原因,我正在检查触摸哪个CTouch对象在ccTouchMoved函数中移动的方式工作正常,但是当我尝试在ccTouchEnded中完全相同的事情时,它不起作用。

编辑:我收回。 用于更新ccTouchMoved中的ct的“if”语句只能在第一次使用。 我认为这可能是真正的问题。 因为CTouch对象没有被更新,所以在触摸结束时,其信息与UITouch对象的信息不同。

我已经用lastTouchLocation和touchLocation尝试了ccTouchEnded中的“if”语句,但都没有工作。 “if”语句从来就不是真的,因此removeTouch总是空的。

ccTouchEnded中的lastTouchLocation和touchLocation总是与ct.lastPosition大不相同。 为了确保我覆盖了一切,下面是一个示例集:

 ct.lastPosition: 84,125 ct.currentPosition: 85,125 lastTouchLocation: 155,131 touchLocation: 174,132 

好吧,我明白了,这不是我显示的代码。

我正在检查CTouch对象以前的位置对UITouch对象的位置。 我需要做的是检查CTouch对象的当前位置再次UITouch对象的以前。

得到它的工作。