我有两个SKNodes,RMnode和RLnode,接收触摸。不幸的是,在同一时间。Objective C - 如何在第一个SKnode被触摸时禁用第二个Sknode的触摸
我曾尝试禁用触摸第二个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位置的节点询问场景(self)的帮助方法。然后if语句检查所选节点是否是2个ruby节点之一,并“激活”或“停用”它。现在,我只想要禁用其中一个节点的触摸,如果另一个先被触摸,反之亦然。即触摸第一个红宝石 - >禁用第二个红宝石节点的触摸。第一个红宝石第二次触摸 - >启用第二个红宝石节点,反之亦然。 – Chriss1979