我正在制作一款涉及太空船在屏幕上从左向右移动的iPhone游戏。我想让它只在按下按钮时才会移动。这是我当前创建移动的代码,但是当按钮不再按下时它不会停止。
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGSize winSize = [CCDirector sharedDirector].winSize;
NSSet *allTouches = [event allTouches];
UITouch *touch = [allTouches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
if (CGRectContainsPoint([_paddle2 boundingBox], location)){
int bottomOfScreenX = 0 + _Paddle1.contentSize.width/2;
id action = [CCMoveTo actionWithDuration:5 position:ccp(bottomOfScreenX,winSize.height/3) ];
[_starShip runAction:action];
[action setTag:1];
}
}
-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
[_starShip stopActionByTag:1];
}
答案 0 :(得分:1)
我认为这与您使用“ccTouchesBegan”和“ccTouchEnded”有关。注意“触摸”与“触摸”。他们需要保持一致。 ccTouchesBegan处理多个触摸事件,而ccTouchBegan则用于单个触摸事件。因此,看起来您正在处理单个触摸事件,您实际上不需要使用ccTouchesBegan。把它切换到ccTouchBegan,你应该没问题。
答案 1 :(得分:0)
此代码存在的问题是TouchHasEnded和TouchHasBegan都使用不同的参数设置器。触摸开始使用NSSet,而TouchEnded正在起诉UITouch。将TouchHasEnded设置为
- (void)ccTouchEnded:(NSSet *)触及withEvent:(UIEvent *)事件;
或
开始触摸
- (void)ccTouchBegan :( UITouch *)触及withEvent:(UIEvent *)事件。
第二种方法需要略微调整逻辑。