Важнейшие штрихи в Spritekit

В игре, над которой я работаю, вы можете перемещать персонажа слева направо, касаясь левой / правой стороны экрана. Я пытаюсь сделать так, чтобы если вы касались левой стороны, а затем касались правой стороны, персонаж начинает двигаться вправо, а не влево; действие по перемещению влево отменяется. В настоящее время я сделал так, что игра работает в одно касание, но метод отмены предыдущего касания - вот где я застрял. Мой код:

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

if (location.x < screenWidth/2){ leftMovement = YES; [player runLeft]; } else { rightMovement = YES; [player runRight]; } self.userInteractionEnabled = NO; } - (void) touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self playerStop]; self.userInteractionEnabled = YES; } - (void) update:(NSTimeInterval)currentTime { if (isTouched && leftMovement){ player.physicsBody.velocity=CGVectorMake(-PLAYERSPEED, player.physicsBody.velocity.dy); } else if (isTouched && rightMovement){ player.physicsBody.velocity=CGVectorMake(PLAYERSPEED, player.physicsBody.velocity.dy); } }


person Exprosul    schedule 29.12.2015    source источник
comment
что такое runLeft и runRight, вы можете показать это   -  person Knight0fDragon    schedule 29.12.2015
comment
Это просто анимация бега игрока; они меняют текстуру персонажа.   -  person Exprosul    schedule 29.12.2015
comment
Что ж, из того, что я вижу, вы отключаете касание, когда оно нажимается, поэтому, удерживая левое, правое, никогда не будет регистрироваться   -  person Knight0fDragon    schedule 29.12.2015
comment
если я понимаю это, изменение self.userinteractionEnabled даже не нужно, вы хотите продолжать использовать последний штрих и обрабатывать его направление   -  person Knight0fDragon    schedule 29.12.2015
comment
Только что посмотрел ваш монтаж, почему вы делаете такое изменение скорости? Измените скорость внутри вашего сенсорного кода, чтобы исключить операторы if в вашем обновлении. (Нет смысла устанавливать одно и то же значение снова и снова)   -  person Knight0fDragon    schedule 29.12.2015
comment
Я удалил self.userintectionEnabled, и причина, по которой у меня его нет в touchesBegan, заключается в том, что скорость возвращается к 0 и не является постоянной.   -  person Exprosul    schedule 29.12.2015
comment
ааааааааааааааааааааааааак =)))))   -  person Knight0fDragon    schedule 29.12.2015


Ответы (1)


Одна вещь, которую вы должны учитывать, - это изменить значение как leftMovement, так и rightMovement, когда пользователь касается другой стороны экрана, в противном случае правильное движение в методе update никогда не будет вызвано.

if (location.x < screenWidth/2){
    leftMovement = YES;
    rightMovement = NO;
    [player runLeft];
}
else {
    rightMovement = YES;
    leftMovement = NO;
    [player runRight];
}
person WangYudong    schedule 30.12.2015