Переместите SKSpriteNode в фактическую точку касания в игре ios

У меня есть SKSpriteNode, который является мячом. У моего взгляда нет силы тяжести. Я могу переместить мяч, нажимая на него импульс в начале, и я хочу, чтобы он переместился в точку касания пользователя, в которую мы можем попасть - (void) touchsBegan: (NSSet *) касается объекта: (UIEvent *), не влияя на его движение.

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

    for (UITouch *touch in touches)
        {
            CGPoint location = [touch locationInView:self.view];
            SKAction *moveToPoint = [SKAction moveByX:location.x y:location.y duration:2];

            [ball runAction:moveToPoint];
        }
}

Кажется, что это не работает. Помогите мне, ребята.

+1
источник поделиться
1 ответ

Если вы хотите отправить узел непосредственно в точку, используйте метод:

[SKAction moveTo:location duration:2];

Метод SKAction moveBy: перемещает узел по SKAction moveBy: x и y, а метод moveTo к точке в родительском узле.

РЕДАКТИРОВАТЬ:

Также измените строку:

CGPoint location = [touch locationInView:self.view];

в

CGPoint location = [touch locationInNode:self];

UIView имеет другую систему координат, чем SKScene.

РЕДАКТИРОВАТЬ 2: вы можете удалить влияние физики во время касания

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

    for (UITouch *touch in touches)
        {
            ball.physicsBody.dynamic = NO;

            CGPoint location = [touch locationInNode: self];
            SKAction *moveToPoint = [SKAction moveTo:location duration:2];

            [ball runAction:moveToPoint];
        }
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    ball.physicsBody.dynamic = YES;
}
+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос