Ускорение стремится к нулю, когда противоположное направление быстро нажимается последовательно до последнего.

#python #pygame #game-physics

#python #pygame #игра-физика

Вопрос:

Это мой код в моем классе героев (тот, которым управляет игрок), который запускает каждое обновление:

 self.speedx  = ((self.dirx * self.maxspeed) - self.speedx) * self.acc
self.x =self.speedx
self.speedy  = ((self.diry * self.maxspeed) - self.speedy) * self.acc
self.y =self.speedy
  

Это мой код получения событий:

 if event.type == KEYUP:
            if event.key == K_RIGHT:
                active.dirx=0
            if event.key == K_LEFT:
                active.dirx=0
            if event.key == K_UP:
                active.diry=0
            if event.key == K_DOWN:
                active.diry=0
        if event.type == KEYDOWN:
            if event.key == K_RIGHT:
                active.dirx=1
            if event.key == K_LEFT:
                active.dirx=-1
            if event.key == K_UP:
                active.diry=-1
            if event.key == K_DOWN:
                active.diry=1
  

Проблема в том, что когда я некоторое время иду вправо (или вверх), а затем отпускаю и быстро нажимаю противоположное направление (влево, вниз), мое ускорение для этого направления стремится к нулю. Это не было бы большой проблемой, если бы игра не требовала большого рефлекса, и я не могу допустить, чтобы игроки выходили из строя в середине боя.

Какие-либо решения? Если я был недостаточно ясен, просто скажите.

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

1. каков желаемый эффект?

2. Вы действительно имеете в виду, что ваше ускорение стремится к нулю? или это ваша скорость?

3. Если оно недостаточно отзывчиво, может быть, уменьшить ускорение, добавить трение или и то, и другое?

Ответ №1:

Может случиться так, что противоположное событие нажатия клавиши принимается до нажатия клавиши. Я бы защитил обработку события KEUP, чтобы убедиться, что противоположное НАЖАТИЕ клавиши не произошло. Что-то вроде:

 if event.key == K_RIGHT and active.dirx == 1:
      active.dirx=0

...
  

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

1. Потрясающе, это сработало! Большое спасибо. Я чувствую себя таким глупым, что не понял.