根据触摸位置拖动SKSpriteNode

jus*_*ike 6 objective-c ios sprite-kit

我试图在y轴上拖动一个精灵,但是根据触点在节点上的开始位置,使精灵"粘住"到用户手指.精灵当前正在拖动,但似乎是将精灵的锚点捕捉到节点内的触摸位置.

我假设它与通过这样做获取节点内的位置有关,[touch locationInNode:selectedNode];但我不确定从那里去哪里.

这是我目前的代码.

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    for (UITouch *touch in touches) {
        CGPoint location  = [touch locationInNode:self];
        SKNode *node = [self nodeAtPoint:location];
        CGPoint newPosition = CGPointMake(node.position.x, location.y);

        if ([node.name isEqualToString:self.selectedNode] ) {

            if (newPosition.y > 230) {
                newPosition.y = 230;
            }
            node.position = newPosition;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ZeM*_*oon 3

您需要根据节点上当前的触摸位置偏移 newPosition。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    for (UITouch *touch in touches) 
    {
        CGPoint location  = [touch locationInNode:self];
        SKNode *node = [self nodeAtPoint:location];


        if ([node.name isEqualToString:self.selectedNode] )
        {
            CGPoint previousLocation = [touch previousLocationInNode:self];
            float diff = location.y - previousLocation.y;
            CGPoint newPosition = CGPointMake(node.position.x, node.position.y + diff);


            if (newPosition.y > 230) {
                newPosition.y = 230;
            }
            node.position = newPosition;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)