Pygame, если клавиша нажата, а затем отпущено действие - PullRequest
1 голос
/ 30 апреля 2020

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

Мой текущий код такой

    def left(self):
        self.x -= 1 * self.xvelocity
        if not self.xvelocity == 10:
            self.xvelocity += 1

    def right(self):
        self.x += 1 * self.xvelocity
        if not self.xvelocity == 10:
            self.xvelocity += 1

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    keys_pressed = pygame.key.get_pressed()

    if keys_pressed[pygame.K_LEFT]:
        player.left()

    if keys_pressed[pygame.K_RIGHT]:
        player.right()

Я хочу сбросить xvelocity обратно на 0 если правая или левая клавиша отпущена. На данный момент этого не происходит, поэтому, если вы двигаетесь вправо и ускоряетесь, а затем двигаетесь влево, у вас все еще остается та же скорость.

Я попытался исправить это, добавив следующее:

    def left(self, *args):
        if args:
            self.x -= 1 * self.xvelocity
            if not self.xvelocity == 10:
                self.xvelocity += 1
        else:
            self.xvelocity = 0

    def right(self, *args):
        if args:
            self.x += 1 * self.xvelocity
            if not self.xvelocity == 10:
                self.xvelocity += 1
        else:
            self.xvelocity = 0

Но я не могу получить эффект ускорения снова, если вы меняете направление. Я что-то упустил?

1 Ответ

1 голос
/ 30 апреля 2020

Вы можете попытаться разбить ваш левый / правый вход следующим образом:

1) left. Increase velocity to left till max 
2) right. increase velocity to right till max 
3) L+R. Invalid 
4) No input. Velocity resets to zero 
5) L->R/R->L. left velocity resets to zero and now increases in right direction. vice-versa

Глядя на свой исходный код, вы допустили ошибку, переключая знаки без обнуления скорости. Ваша переменная «скорость» на самом деле скорость. и знак, который вы использовали при переходе на self.x, обозначает ваше направление. Я предложил немного другой подход, который гарантирует, что направление включено в вашу скорость. -ве слева и + ве справа. Имейте в виду, что вам, вероятно, нужно создать кейсы для No input и L + R.

def left(self):
    if self.xvelocity>0: #If heading to the right, reset velocity to 0
        self.xvelocity = 0
    else: #We were not heading to the right so begin left ward velocity
        self.xvelocity -=1
    self.x += 1*max(-10,self.xvelocity) #another way to set limit on negative velocity

def right(self): # simply a reflect of the above
    if self.xvelocity<0:
        self.xvelocity = 0
    else:
        self.xvelocity +=1
    self.x += 1*min(10,self.xvelocity)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...