精灵套件 - 手指移动节点的移动

时间:2014-06-24 14:18:58

标签: ios sprite-kit

我正试图让我的SKSpriteNode用手指顺利移动。我玩过许多游戏,无论我的手指走得多快,这个对象都会跟着我的手指。但是根据我目前的代码,我经常失去对物体的控制权并且提高速度也会失去对它的控制。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     /* Called when a touch begins */

    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInNode:self];
        SKSpriteNode *node = (SKSpriteNode *)[self nodeAtPoint:location];
        if (node.name != nil) {
            if (node.name == p1Name) {
                onP1 = true;
            }
            else if (node.name == p2Name) {
                onP2 = true;
            }
        }
    }
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInNode:self];
        CGPoint preLocation = [touch previousLocationInNode:self];
        SKSpriteNode *paddle = (SKSpriteNode *)[self nodeAtPoint:location];
       if (paddle.name != nil) {
            if ((paddle.name == p1Name && onP1) || (paddle.name == p2Name && onP2)) {
                int paddleX = paddle.position.x + (location.x - preLocation.x);
                paddleX = MAX(paddleX, paddle.size.width/2);
                paddleX = MIN(paddleX, self.size.width - paddle.size.width/2);
                paddle.position = CGPointMake(paddleX, paddle.position.y);
            }
        }
    }

}

当我触摸并在屏幕上移动时,如何让SKSpriteNode用手指顺畅移动?

1 个答案:

答案 0 :(得分:0)

你将touchesMoved代码设置为仅在精灵上方触摸时移动精灵。因此,只要您快速移动手指,代码将无法执行,因为触摸下方没有节点。您需要在touchesBegan中将“当前触摸的”精灵设置为属性,然后在触摸移动期间对其进行操作,或者在touchesMoved方法中创建不同的逻辑。