2014-03-30 65 views
2

我想用兩個手指移動兩個不同的物體。問題是我無法使用touchBegan方法,因爲我無法識別當前正在操作哪個對象。最好的方法是使用手勢識別器,因爲我可以識別當前正在拖動的視圖,我可以移動兩個或更多不同的對象,並且我總是會引用它們。但我無法使用手勢識別器和SpriteKit.I無法將手勢添加到我的對象,但我可以將手勢添加到主SKView,但它只能用於一個觸摸對象。所以,問題是我如何移動兩個不同的對象與SpriteKit?用兩個手指移動兩個不同的物體SpriteKit

回答

0

我加入SKViews-(void)didMoveToView:方法解決這個問題,並添加非標準UIGestureRecognizes這個SKViews

0

觸摸...方法肯定可以用於此。舉個例子,爲了平移多個精靈,首先遍歷觸摸。對於每一個,問場景中的所有節點。 (這是節點,您可以獲取對象的引用)

然後遍歷該點上的所有節點。如果他們通過某種可移動性測試(可以說是通過名稱),則使用算術來根據UITouch對象的當前和之前觸摸位置確定其新位置。話雖如此,下面的代碼將移動名稱爲「nameOfMovableObject」的場景中的任何精靈以及該位置的觸摸。

CG_INLINE CGPoint CGPointFromPreviousCoords(CGPoint affectedPoint, CGPoint currentPoint, CGPoint previousPoint) { 
    return CGPointMake(affectedPoint.x + currentPoint.x - previousPoint.x, affectedPoint.y + currentPoint.y - previousPoint.y); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesMoved:touches withEvent:event]; 

    for (UITouch *touch in touches) { 
     CGPoint location = [touch locationInNode:self]; 
     CGPoint previousLocation = [touch previousLocationInNode:self]; 

     for (SKNode *node in [self nodesAtPoint:location]) { 
      if ([node.name isEqualToString:@"nameOfMovableObject"]) { 
       [node setPosition:CGPointFromPreviousCoords(node.position, location, previousLocation)]; 
      } 
     } 
    } 
} 
+0

哦,我是想類似的東西,但它創建了一個新的問題。如果我非常快地移動對象,那麼[self nodesAtPoint:]將不會強制在我的對象上。另外還有一條線是我的物體不能穿過的線,當我用手指穿過這條線時,它靠近它,但是當我將手指移回線外時,這個物體必須與我的手指一樣移動。但是觸摸方法不包含對我的對象的引用,他們只搜索位置爲 –

+0

的對象@IgorPrusyazhnyuk這不是解決方案中的一個缺陷。這些只是你必須適應的額外條件。你需要找出一種方法來存儲對這些位置偏移量和你的精靈的引用,如果它們給你帶來問題的話。 –

+0

我知道,我試圖通過在觸摸發生時將我的對象添加到數組中來解決此問題,然後使用touchMoved將它們移動到數組中,並使用touchEnded:從數組中移除它們。但是,由於可能有兩個以上的觸動,這似乎是不真實的,我不知道如何將對象與觸碰聯繫起來。正如我所說,手勢將是完美的解決方案,但我不明白爲什麼蘋果沒有添加手勢SpriteKit對象,arhh ..必須有某種方式 –

相關問題