Ios 拖动1个与手指移动相关的精灵节点?

Ios 拖动1个与手指移动相关的精灵节点?,ios,xcode,xcode5,sprite-kit,Ios,Xcode,Xcode5,Sprite Kit,我已经创建了一个名为的节点,并且当它触摸并拖动该节点时,我已经命令它从屏幕上拖动。出于某种原因,这个方法(下面的代码)允许我拖动屏幕上的任何节点。如何仅使“testNode2”生效 我也希望节点拖动到手指的移动,但是如果手指在屏幕上的任何地方被触摸,而不仅仅是当节点本身被触摸时,这可以工作吗?(但不要跳到手指的位置,只需移动与手指移动相关的部分)。例如,如果屏幕被按到任何位置,然后向左拖动100像素,则节点将向左移动100像素 我的代码在下面 -(void) colourSprite2:(CGS

我已经创建了一个名为的节点,并且当它触摸并拖动该节点时,我已经命令它从屏幕上拖动。出于某种原因,这个方法(下面的代码)允许我拖动屏幕上的任何节点。如何仅使“testNode2”生效

我也希望节点拖动到手指的移动,但是如果手指在屏幕上的任何地方被触摸,而不仅仅是当节点本身被触摸时,这可以工作吗?(但不要跳到手指的位置,只需移动与手指移动相关的部分)。例如,如果屏幕被按到任何位置,然后向左拖动100像素,则节点将向左移动100像素

我的代码在下面

-(void) colourSprite2:(CGSize)size {
    self.testNode2 = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(30, 30)];
    self.testNode2.position = CGPointMake(self.size.width/2, self.size.height/1.1);
    self.testNode2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.testNode2.frame.size];


    [self addChild:self.testNode2];

}


-(void)touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event
{ self.testNode2 = [self nodeAtPoint:[[touches anyObject] locationInNode:self]]; }

-(void)touchesMoved:(NSSet*) touches withEvent:(UIEvent*) event
{ self.testNode2.position = [[touches anyObject] locationInNode:self]; }

-(void)touchesEnded:(NSSet*) touches withEvent:(UIEvent*) event
{ self.testNode2 = nil; }

touch delegate返回一个包含多个UITouch对象的触摸
NSSet
,每个UITouch对象对应于与实现委托方法的对象相关的触摸

在您的情况下,节点将自身移动到代理遇到的任何触摸的位置。这包括在屏幕上进行多次触摸

你应该阅读有关课程的内容

问题的解决方案是跟踪用于移动节点的特定触摸

将UITouch对象作为实例变量进行维护:

@implementation MyScene
{
    UITouch *currentTouch;
}
然后按如下方式跟踪特定触摸:

-(void)touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event
{
    UITouch *touch = [touches anyObject];
    SKNode *node = [self nodeAtPoint:[touch locationInNode:self]];
    if (currentTouch == nil && [node isEqual:self.testNode2])
    {
        currentTouch = touch;
    }
}

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

    if ([touch isEqual:currentTouch])
    {
        self.testNode2.position = [touch locationInNode:self];

    }
}

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

    if ([touch isEqual:currentTouch])
    {
        self.testNode2 = nil;
        currentTouch = nil;
    }

}

谢谢你的回复…我已经试过了,它仍然在做同样的事情…所有的节点在被触摸时都在移动?你说的是“所有的节点”吗?从您发布的代码来看,似乎您只想移动一个节点。我只想移动一个节点,但它会移动我选择的任何节点?这对我的任何问题都不起作用,我错过了什么吗?