簡體   English   中英

用兩個手指移動兩個不同的對象SpriteKit

[英]Moving two different objects with two fingers SpriteKit

我想用兩個手指移動兩個不同的對象。 問題是由於無法識別當前正在操作的對象,所以無法使用touchBegan方法。 最好的方法是使用手勢識別器,因為我可以識別當前正在拖動的視圖,可以移動兩個或更多不同的對象,並且始終對它們有所了解。 但是我不能在SpriteKit中使用手勢識別器,也不能在我的對象中添加手勢,但是可以在主SKView中添加手勢,但是它僅適用於一個觸摸對象。 因此,問題是我如何使用SpriteKit移動兩個不同的對象?

觸摸...方法肯定可以用於此目的。 僅舉例來說,要平移多個精靈,請先遍歷觸摸。 對於每個節點,詢問場景中所有節點。 (這是您可以獲取對象引用的節點)

然后在那一點上遍歷所有節點。 如果它們通過某種可移動性測試(按名稱說),請使用算法根據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)];
            }
        }
    }
}

我通過將SKViews添加到-(void)didMoveToView:方法來解決此問題,並向此SKViews添加標准UIGestureRecognizes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM