2017-04-16 79 views
0

我有兩個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]; 
     } 
    } 
} 
} 
+0

selectNodeForTouch實際上做了什麼 - 這是不明確的。這個顯示方法在哪裏?在場景中還是在節點上?兩個節點是否都在觸摸位置?在處理程序中更改userInteractionEnabled不會改變對當前觸摸的反應 - 事件已經觸發,因此只能影響將來的事件。你能否更詳細地解釋你有什麼節點,以及當他們被觸摸時想要發生什麼。 –

+0

@AliBeadle輔助方法在場景中。它是位於touchLocation位置的節點詢問場景(self)的幫助方法。然後if語句檢查所選節點是否是2個ruby節點之一,並「激活」或「停用」它。現在,我只想要禁用其中一個節點的觸摸,如果另一個先被觸摸,反之亦然。即觸摸第一個紅寶石 - >禁用第二個紅寶石節點的觸摸。第一個紅寶石第二次觸摸 - >啓用第二個紅寶石節點,反之亦然。 – Chriss1979

回答

0

設置節點的userInteractionEnabled的原因不起作用,因爲您期望的是您的touchesBegan位於場景中,而不是sprite。 userInteractionEnabled只允許/不允許觸摸到SKNode屬性(SKScene也是SKNode) - 在你的代碼中,場景的userInteractionEnabled總是爲true,所以觸摸總是通過場景的touchesBegan方法(你的精靈的touchesBegan 被禁用 - 但你不覆蓋它,所以你沒有注意到)。

要以這種方式使用userInteractionEnabled,您需要自己繼承小精靈並處理子類精靈內的觸摸 - 然後設置userInteractionEnabled將按您的期望工作。

如果你不想重構你的代碼,你可以用其他方式將每個精靈標記爲「無法觸及」(this SO answer建議使用SKNode的現有zPosition屬性),然後在接受觸摸之前在場景中使用它(例如,如果touchedNode.zPosition!= 0 ...)。

+0

解釋它....:D感謝您的幫助,它解決了這個問題。我將觸摸開始從場景改爲精靈。 – Chriss1979

相關問題