Cocos2d-iphone 1.0.1.
CCScene
推送进入CCDirector
(因此主游戏场景仍然存在于内存中)。CCScene
弹出。因此,主游戏场景返回。有没有办法“重置”屏幕触摸?我想在主游戏场景的onEnter
方法中这样做。我试过像
self.isTouchEnabled = NO;
self.isTouchEnabled = YES;
希望这会重新注册触摸调度程序,从而导致某种重置。它不起作用。
基本上,我需要一种方法来告诉主要游戏场景“伙计,无论你想到什么,没有人触摸屏幕。”
修改
请注意,如果再次按屏幕,则会固定。
答案 0 :(得分:1)
为了确保我理解这个问题:
在弹出战斗场景后,角色继续四处移动,好像用户从未将手指从操纵杆上松开一样?
我最初的想法是你在代码中的某个地方有更深层次的设计缺陷。我的理解是你想使用至少一个层来处理输入。尝试将“游戏”CCScene中的所有内容转移到“游戏”CCLayer,并将该层添加为场景的子项。然后注册图层以接收触摸输入。
如果这不起作用,您可以随时使用标志。将您所在的场景与您想要进入的场景进行比较,如果不是,请不要激活操纵杆控制器。有点hack-y但它有效。
答案 1 :(得分:0)
我自己遇到过这种问题。
我是如何修理的:
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches){
[touchesOnScreen addObject:touch];
}
}
- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches){
[touchesOnScreen removeObject:touch];
}}
- (void)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[touchesOnScreen removeAllObjects];
}
所以基本上iOS会保持指向屏幕上每一次触摸的指针。你做的是用NSSet管理那些自己的触摸。当你按下场景时,只需将每个UITouch从设置设置为nil。这相当于UITouchPhaseCancelled
。这将取消屏幕上的所有触摸。如果用户仍然将他的手指放在屏幕上,那么触摸将不再被注册......即使他移动它或其他东西。
注意:您需要删除ccTouchesCancelled
中的所有对象(当用户在屏幕上有6个或更多触摸时调用它),否则当他再次触摸应用程序崩溃时。如果您的应用需要超过5次触摸,则需要找到解决方法。
答案 2 :(得分:0)
最简单的解决方案可能是让你的CCDirector完成弹出你的战斗场景后,首先在违规视图上调用resignFirstResponder
然后调用'becomeFirstResponder`;无论如何,似乎应该向另一个响应者转发,希望当没有其他人处理它时,它会失败。
对UIView方法的更复杂的深入探讨提供了这个私人调用cancelTouchTracking
。最有可能它与@skytz所做的类似。 警告:最后这种情况很可能会让您在应用商店流程中遭到拒绝,但对于您的信息却是如此。
我会选择更简单的解决方案并希望它有效。 O_O