这个拖动效果是什么,以及执行它的必要操作?

时间:2014-06-17 04:18:48

标签: ios objective-c sprite-kit touchesmoved skspritenode

好吧,我现在很难找到执行此拖动效果的资源。 效果是这样的:

  • 触摸SKSpriteNode并按住
  • 然后拖动到要移动SKSpriteNode的位置
  • 最后你释放你的手势,节点将以一条直线(以直线运动)移动到你希望以延迟的速度移动的位置,这样当你松开手指时你可以看到它移动。

1 个答案:

答案 0 :(得分:0)

不知道拖动效果的任何名称,但实现起来非常简单。以下是一个非常基本的实现,可以进行增强。

首先,在场景中声明两个实例变量

SKNode *selectedNode;
UITouch *currentTouch;

然后,您可以使用触摸代理实现所需的功能。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    CGPoint touchPoint = [touch locationInNode:self];

    SKNode *node = [self nodeAtPoint:touchPoint];

    if ([node.name isEqualToString:@"whatevername"])
    {
        selectedNode = node;
        currentTouch = touch;
    }
}



-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    if ([touch isEqual:currentTouch])
    {
        CGPoint point = [touch locationInNode:self];
        [selectedNode runAction:[SKAction moveTo:point duration:1.0]];
        //Also can calculate time based on distance to make the movement uniform.

        selectedNode = nil;
        currentTouch = nil;
    }
}

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    if ([touch isEqual:currentTouch])
    {
        selectedNode = nil;
        currentTouch = nil;
    }

}