PyGame является изменчивым - PullRequest
2 голосов
/ 27 марта 2020

Я новичок в Pygame, и я смотрю несколько уроков о том, как начать с ним, я написал этот базовый c код, в котором есть только движение и "функция" перехода, но это действительно изменчиво, я не думаю, что это мое оборудование (Macbook Pro 2018). Кто-нибудь имеет представление о том, что происходит?

Вот код:

import pygame
pygame.init()
win_width = 500
win_height = 500
win = pygame.display.set_mode((win_width,win_height))

    pygame.display.set_caption("First PyGame")

    width = 40
    height = 60
    x = win_width/2
    y = win_height/2
    vel = 10

    isJump = False
    jumpCount = 10

    run = True
    while run:
        pygame.time.delay(100)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                print("adios putito")
                run = False

        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and x > vel:
            x -= vel
        if keys[pygame.K_RIGHT] and x < win_width - width - vel:
            x+= vel
        if not (isJump):
            if keys[pygame.K_UP] and y > vel:
                y -= vel
            if keys[pygame.K_DOWN]and y < win_height - height - vel:
                y += vel
            if keys[pygame.K_SPACE]:
                isJump = True
        else:
            if jumpCount >= -10:
                neg = 1
                if jumpCount < 0:
                    neg = -1
                y -= (jumpCount ** 2) * 0.5 * neg
                jumpCount -= 1
            else:
                isJump = False
                jumpCount = 10

        win.fill((0,0,0))
        pygame.draw.rect(win,(255,255,255), (x,y,width,height))
        pygame.display.update()

    pygame.quit()

Ответы [ 2 ]

3 голосов
/ 27 марта 2020

Строка

pygame.time.delay(100)

задерживает ваш скрипт на миллисекунды, удалите эту строку, и она должна работать просто отлично!

Результат:

import pygame
pygame.init()
win_width = 500
win_height = 500
win = pygame.display.set_mode((win_width,win_height))

    pygame.display.set_caption("First PyGame")

    width = 40
    height = 60
    x = win_width/2
    y = win_height/2
    vel = 10

    isJump = False
    jumpCount = 10

    run = True
    while run:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                print("adios putito")
                run = False

        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and x > vel:
            x -= vel
        if keys[pygame.K_RIGHT] and x < win_width - width - vel:
            x+= vel
        if not (isJump):
            if keys[pygame.K_UP] and y > vel:
                y -= vel
            if keys[pygame.K_DOWN]and y < win_height - height - vel:
                y += vel
            if keys[pygame.K_SPACE]:
                isJump = True
        else:
            if jumpCount >= -10:
                neg = 1
                if jumpCount < 0:
                    neg = -1
                y -= (jumpCount ** 2) * 0.5 * neg
                jumpCount -= 1
            else:
                isJump = False
                jumpCount = 10

        win.fill((0,0,0))
        pygame.draw.rect(win,(255,255,255), (x,y,width,height))
        pygame.display.update()

    pygame.quit()
0 голосов
/ 27 марта 2020

Хорошей идеей будет иметь игровые часы, которые задерживают вашу программу настолько, чтобы поддерживать постоянную частоту кадров. Вы можете использовать объект pygame.time.Clock в Pygame и использовать метод tick(), чтобы отложить игру. Метод tick принимает целое число, представляющее FPS, который вы хотите использовать в своей игре. Если ваша игра работает медленнее, чем введенное вами значение FPS, задержка не произойдет.

import pygame
pygame.init()
win_width = 500
win_height = 500
win = pygame.display.set_mode((win_width,win_height))

    pygame.display.set_caption("First PyGame")
    clock = pygame.time.Clock()

    width = 40
    height = 60
    x = win_width/2
    y = win_height/2
    vel = 10

    isJump = False
    jumpCount = 10

    run = True
    while run:
        # Delay your game to try and keep 60 FPS.
        clock.tick(60)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                print("adios putito")
                run = False

        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and x > vel:
            x -= vel
        if keys[pygame.K_RIGHT] and x < win_width - width - vel:
            x+= vel
        if not (isJump):
            if keys[pygame.K_UP] and y > vel:
                y -= vel
            if keys[pygame.K_DOWN]and y < win_height - height - vel:
                y += vel
            if keys[pygame.K_SPACE]:
                isJump = True
        else:
            if jumpCount >= -10:
                neg = 1
                if jumpCount < 0:
                    neg = -1
                y -= (jumpCount ** 2) * 0.5 * neg
                jumpCount -= 1
            else:
                isJump = False
                jumpCount = 10

        win.fill((0,0,0))
        pygame.draw.rect(win,(255,255,255), (x,y,width,height))
        pygame.display.update()

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