Cocos2d iphone 有没有可能;重置";现有的接触? 我的主要游戏场景要求玩家用手指按下屏幕,让角色移动。 角色移动时(因此手指按屏幕),可能会发生战斗。这样的战斗会触发一个新的CCScene,它被推入CCDirector(因此主游戏场景仍然存在于内存中) 在战斗中,玩家自然会在某个时候松开手指 战斗结束后,此CCScene弹出。于是,游戏的主场景又回来了 现在出现了一个问题:游戏主场景仍然认为,在战斗前最初按下屏幕的手指仍在同一点按下屏幕,因此操纵杆仍在“运行”,玩家仍在移动,尽管手指不再按下屏幕

Cocos2d iphone 有没有可能;重置";现有的接触? 我的主要游戏场景要求玩家用手指按下屏幕,让角色移动。 角色移动时(因此手指按屏幕),可能会发生战斗。这样的战斗会触发一个新的CCScene,它被推入CCDirector(因此主游戏场景仍然存在于内存中) 在战斗中,玩家自然会在某个时候松开手指 战斗结束后,此CCScene弹出。于是,游戏的主场景又回来了 现在出现了一个问题:游戏主场景仍然认为,在战斗前最初按下屏幕的手指仍在同一点按下屏幕,因此操纵杆仍在“运行”,玩家仍在移动,尽管手指不再按下屏幕,cocos2d-iphone,Cocos2d Iphone,有没有办法“重置”屏幕触摸?我想在主游戏场景的oneter方法中这样做。我试过类似的东西 Cocos2d-iphone 1.0.1. 希望这样可以重新注册touch dispatcher,从而导致某种重置。它不起作用 基本上,我需要一种方式来告诉主要的游戏场景“伙计,不管你怎么想,都没有人触摸屏幕” 编辑 请注意,如果再次按下屏幕,则屏幕已修复。为确保我了解问题: 在你弹出战斗场景后,角色继续移动,就好像用户从未从操纵杆上松开手指一样 我最初的想法是,代码中的某个地方存在更深层次的潜在设计缺陷

有没有办法“重置”屏幕触摸?我想在主游戏场景的
oneter
方法中这样做。我试过类似的东西

Cocos2d-iphone 1.0.1.
希望这样可以重新注册touch dispatcher,从而导致某种重置。它不起作用

基本上,我需要一种方式来告诉主要的游戏场景“伙计,不管你怎么想,都没有人触摸屏幕”

编辑


请注意,如果再次按下屏幕,则屏幕已修复。

为确保我了解问题:

在你弹出战斗场景后,角色继续移动,就好像用户从未从操纵杆上松开手指一样

我最初的想法是,代码中的某个地方存在更深层次的潜在设计缺陷。我的理解是,您希望至少使用一个层来处理输入。尝试将“游戏”场景中的所有内容转移到“游戏”CCLayer,并将该层添加为场景的子层。然后注册图层以接收触摸输入


如果这不起作用,你可以用旗子。将您所处的场景与您想要进入的场景进行比较,如果没有,请不要激活操纵杆控制器。有点像黑客,但它是有效的。

我自己也遇到过这种问题

我是如何修复它的:

self.isTouchEnabled = NO;
self.isTouchEnabled = YES;
因此,iOS基本上会在屏幕上的每一次触摸都有一个指针。您要做的是使用NSSet自己管理这些接触。推送场景时,只需将集合中的每个UITouch设置为零。这相当于取消了
UITouchPhase
。这将取消您在屏幕上的所有触摸。如果用户的手指仍在屏幕上,触摸将不再被注册…即使他移动它或其他东西


注意:您需要删除
cctouchscancelled
中的所有对象(当用户在屏幕上有6次或更多次触摸时会调用该函数),否则当用户再次触摸应用程序时会崩溃。如果你的应用程序需要5次以上的触摸,你需要找到一种解决方法。

最简单的解决方案可能是让你的指挥中心主任在弹出你的战斗场景后,首先呼叫“辞职第一响应者”,然后在有问题的视图中“成为第一响应者”;不管怎么说,在我的头顶上,它似乎应该在触摸时向前移动到另一个响应者,希望在没有其他人处理它时让它失败

更复杂的UIView方法提供了这个私有调用
cancelTouchTracking
。很可能它做了一些类似于@skytz所做的事情警告:最后一个很可能会让你在应用商店流程中被拒绝,但对于你的信息,它是存在的。

我会选择更简单的解决方案,希望它能奏效。欧欧欧

- (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];
}