Как я могу заставить своих персонажей начать прыгать, используя pygame? - PullRequest
2 голосов
/ 30 сентября 2019

Я пробую прыгать код в моей программе, но персонажи не прыгают. (Элементы управления персонажа 1 - это «a», «d», а элементы управления персонажа 2 - «стрелка влево» и «стрелка вправо». Как получить, чтобы символ 1 прыгал с помощью w, а символ 2 - со стрелкой вверх. что не так с кодом, так как я впервые использую прыжковую механику.

import pygame

pygame.init()

win = pygame.display.set_mode((700, 480))
pygame.display.set_caption("First project")
run = True
red = (255, 0, 0)
green = (0, 255, 0)


def drawbg():
    pygame.display.update()
    win.fill((255, 255, 255))


class person(object):
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 5
        self.IsJump = False
        self.jumpCount = 10


man = person(100, 400, 50, 60)
man2 = person(500, 400, 50, 60)

while run:
    pygame.time.delay(25)


    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and man2.x > man2.vel:
        man2.x -= man2.vel

    if keys[pygame.K_RIGHT] and man2.x < 700 - man2.width - man2.vel:
        man2.x += man2.vel

    if keys[pygame.K_a] and man.x > man.vel:
        man.x -= man.vel

    if keys[pygame.K_d] and man.x < 700 - man.width - man.vel:
        man.x += man.vel

    if not man.IsJump and keys[pygame.K_SPACE]:
        man.IsJump = True
        man.JumpCount = 10

    if man.IsJump:
        if man.JumpCount >= -10:
            neg = 1
            if man.JumpCount < 0:
                neg = -1
            man.y -= (man.JumpCount ** 2) / 2 * neg
            man.JumpCount -= 1
        else:
            man.IsJump = False
            man.JumpCount = 10

    pygame.draw.rect(win, red, (man.x, man.y, man.width, man.height))
    pygame.draw.rect(win, green, (man2.x, man2.y, man2.width, man2.height))
    drawbg()

pygame.quit()

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Переместить код, который обрабатывает прыжок, в метод update класса person:

class person(object):
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 5
        self.IsJump = False
        self.jumpCount = 10

    def update(self): 
        if self.IsJump:
            if self.JumpCount >= -10:
                neg = 1 if self.JumpCount >= 0  else -1
                self.y -= (self.JumpCount ** 2) / 2 * neg
                self.JumpCount -= 1
            else:
                self.IsJump = False
                self.JumpCount = 10

Активировать прыжок игрока 1 (man) на k и прыжок игрока 2 (man2) на UP .
Вызов метода update для объектов man и man2 после обработки события:

while run:
    pygame.time.delay(25)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and man2.x > man2.vel:
        man2.x -= man2.vel
    if keys[pygame.K_RIGHT] and man2.x < 700 - man2.width - man2.vel:
        man2.x += man2.vel

    if keys[pygame.K_a] and man.x > man.vel:
        man.x -= man.vel
    if keys[pygame.K_d] and man.x < 700 - man.width - man.vel:
        man.x += man.vel

    if not man.IsJump and keys[pygame.K_w]:
        man.IsJump = True
        man.JumpCount = 10
    if not man2.IsJump and keys[pygame.K_UP]:
        man2.IsJump = True
        man2.JumpCount = 10

    man.update()
    man2.update()

    pygame.draw.rect(win, red, (man.x, man.y, man.width, man.height))
    pygame.draw.rect(win, green, (man2.x, man2.y, man2.width, man2.height))
    drawbg()

pygame.quit()
0 голосов
/ 30 сентября 2019

Кажется, вы сначала не писали коды, реагирующие на ввод с клавиатуры w (pygame.K_w) и up (pygame.K_UP). Однако в загруженном вами коде player1 (man) уже может правильно прыгать с пробелом (K_SPACE). Вы можете скопировать эту часть и просто изменить некоторые переменные для man2.

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