【发布时间】:2017-04-16 05:20:23
【问题描述】:
我有两个 SKNode,RMnode 和 RLnode, 接收触摸。不幸的是,同时。
我尝试在第一个被触摸时禁用 第二个 SKnode 上的触摸,反之亦然,但由于某种原因,它似乎不起作用。
是否有其他方法可以解决这个问题?
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
CGPoint Rubyposition = [touch locationInNode:self];
[self selectNodeForTouch:Rubyposition]; //a helper method that asks the scene (self) for the node that is on the position touchLocation.
SKNode *RMnode = [self nodeAtPoint:Rubyposition];
SKNode *RLnode = [self nodeAtPoint:Rubyposition];
if ([RLnode.name isEqualToString:@"Ruby1"]) {
if(_TouchOnRubyRL == NO){
_TouchOnRubyRL = YES;
//RMnode.userInteractionEnabled = NO; //Not working
[self.level ActivatedBricks:_TouchOnRubyRL];
}
else if(_TouchOnRubyRL == YES){
_TouchOnRubyRL = NO;
//RMnode.userInteractionEnabled = YES; //not working
[self.level ActivatedBricks:_TouchOnRubyRL];
}
}
if ([RMnode.name isEqualToString:@"Ruby2"]) {
if(_TouchOnRubyRM == NO){
_TouchOnRubyRM = YES;
//RLnode.userInteractionEnabled = NO; //Not working
[self.level ActivatedBricks:_TouchOnRubyRM];
}
else if(_TouchOnRubyRM == YES){
_TouchOnRubyRM = NO;
//RLnode.userInteractionEnabled = YES; //Not working
[self.level ActivatedBricks:_TouchOnRubyRM];
}
}
}
}
【问题讨论】:
-
selectNodeForTouch 实际上做了什么——这还不清楚。这个显示的方法在哪里 - 在场景中还是在节点上?两个节点实际上都在触摸位置吗?在处理程序中更改 userInteractionEnabled 不会改变对当前触摸的反应 - 事件已经触发,因此只能影响未来的事件。您能否更详细地解释您拥有哪些节点以及当它们被触摸时您希望发生什么。
-
@AliBeadle 辅助方法在场景中。它是一个帮助方法,它向场景(自身)询问位于 touchLocation 位置的节点。然后 if 语句检查所选节点是否是 2 个 ruby 节点之一,并“激活”或“停用”它。我现在只想禁用对其中一个节点的触摸,如果先触摸另一个节点,反之亦然。 IE。 1st ruby touch -> 在第二个 ruby 节点上禁用触摸。 1st ruby 第二次触摸 --> 在 2nd ruby 节点上启用触摸,反之亦然。
标签: ios objective-c sprite-kit skspritenode