#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. Потрясающе, это сработало! Большое спасибо. Я чувствую себя таким глупым, что не понял.