Как ускорить персонажа при нажатии клавиши со стрелкой (iOS)

#ios #cocoa-touch #sprite-kit #game-engine

#iOS #cocoa-touch #набор спрайтов #игровой движок

Вопрос:

Я пытаюсь создать игру с помощью фреймворка sprite kit, но я застрял, пытаясь заставить персонажа двигаться. Я хочу, чтобы персонаж перемещался (влево / вправо) при нажатии клавиши (влево / вправо). При нажатии персонаж должен ускоряться (без ограничения скорости), а когда я отпускаю клавишу, персонаж должен замедляться до полной остановки. Я не могу придумать способ реализовать это с помощью SKAction … Кто-нибудь может пролить на это свет? Спасибо. Это то, что я пробовал до сих пор.

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    /* Called when a touch begins */

    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInNode:self];

    if (touchLocation.x > [[UIScreen mainScreen]applicationFrame].size.width / 2) {
        _rightPressed = YES;
    } else {
        _leftPressed = YES;
    }

}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    _rightPressed = NO;
    _leftPressed = NO;
    _speedDelimiter = 0;
}
-(void)update:(CFTimeInterval)currentTime {
    // ... code ...


    if (_rightPressed amp;amp; !_leftPressed amp;amp; _speedDelimiter < 10) {
        SKAction * moveRight = [SKAction moveBy:CGVectorMake(10, 0) duration:5];
        [self.player runAction:moveRight];
        _speedDelimiter  ;
    } else if (_leftPressed amp;amp; !_rightPressed amp;amp; _speedDelimiter < 10){
        SKAction * moveLeft = [SKAction moveBy:CGVectorMake(-10, 0) duration:5];
        [self.player runAction:moveLeft];
        _speedDelimiter  ;
    }
}
  

Я думаю, что мне следует использовать velocity свойство в SKPhysicsBody свойстве моего персонажа. Но я не уверен.

Комментарии:

1. Этого можно очень легко достичь с помощью физического движка.

2. Как насчет spritekit?

3. Я имею в виду физический движок в SpriteKit. Прикрепите SKPhysicsBody к персонажу и примените к нему силу.

4. / согласитесь, действия не совсем соответствуют тому, что вы пытаетесь сделать. Я думаю, вы могли бы вносить некоторые текущие изменения в свойство speed действия, но я бы просто размещал персонажа вручную при каждом обновлении на основе значений, или, если вам не нужно сверхточное позиционирование, тогда просто позвольте физической системе обрабатывать все это за вас.