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

时间:2014-06-21 06:36:46

标签: ios xcode xcode5 sprite-kit

我已经创建了一个名为的节点,并且当它触摸并拖动节点时,我已经将其从屏幕上拖动。由于某种原因,这个方法(下面的代码)让我在屏幕上显示任何节点。我怎样才能只使用#test; 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; }

1 个答案:

答案 0 :(得分:0)

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

在您的情况下,节点将自己移动到委托遇到的任何触摸位置。这包括屏幕上的多个触摸。

您应该阅读UITouchUIResponder类。

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

将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;
    }

}