Я не могу заставить свой плеер перейти, даже думал, что код очень похож на рабочий пример - PullRequest
0 голосов
/ 04 мая 2019

Я изучал, как использовать pygame, и наткнулся на учебник по прыжкам вашего персонажа. Код не совсем такой, но я не понимаю, почему он не должен работать.

Мне интересно, почему он сначала сделал бы подсчет прыжков False, если собирался спросить:

if not (p1jump):
    if keys[pygame.K_SPACE]:
        p1jump = True

Это сбивает с толку меня, потому что p1jump изначально ложно. Таким образом, вы в основном спрашиваете: если p1jump равен true и нажата пробел, установите p1jump в значение true.

Вот весь класс на всякий случай:

class Player1():
    def __init__(self,x,y):
        self.x = x
        self.y = y
        self.height = 25
        self.width = 25
        self.speed = 5
    def draw(self,r,g,b):
        pygame.draw.rect(win,(r,g,b),(self.x,self.y, self.width ,self.height))
    def movement(self):
        p1jump = False
        jumpcount = False
        keys = pygame.key.get_pressed()

        if keys[pygame.K_a] and self.x > self.speed:
            self.x -= self.speed
        elif keys[pygame.K_d] and self.x < (w - self.width):
            self.x += self.speed

        if not(p1jump):
            if keys[pygame.K_SPACE]:
                p1jump = True
        else:
            if jumpcount >= -10:
                self.y -= (jumpcount **2) *0.5
                jumpcount = 1

            else:
                p1jump = False
                jumpcount = 10

Кроме того, если у вас, ребята, есть более эффективные способы кодирования прыжка, пожалуйста, дайте мне знать! Спасибо!

Ответы [ 2 ]

1 голос
/ 04 мая 2019

Ваш первый фрагмент кода правильный.Однако в методе movement вы устанавливаете p1jump на False каждый раз, когда он вызывается.Я предполагаю, что вы хотите, чтобы он продолжал оставаться True, пока игрок не приземлится.Так что вместо этого сделайте эту переменную атрибутом.

class Player:

    def __init__(self,x,y):
        # ... stuff
        self.jump = False

    def movement(self):
        # ... stuff

        if not self.jump and keys[pygame.K_SPACE]:
            self.jump = True
        else:
            if jumpcount >= -10:
                self.y -= (jumpcount **2) *0.5
                jumpcount = 1
            else:
                self.jump = False
                jumpcount = 10
0 голосов
/ 04 мая 2019

Таким образом, вы в основном спрашиваете: если p1jump равен true и нажата пробел, то установите p1jump в значение true.

Не совсем, not (p1jump): равно True, если p1jumpэто False.not - это обратный оператор в Python.

if not (p1jump) можно переписать как if p1jump == False, если вам понятнее.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...