pygame中“x”和“y”中的独立精灵运动

时间:2013-06-02 00:22:26

标签: python pygame game-physics

好的,这是我目前的计划:

bif="bg.jpg"
mif="pkmn.png"


import pygame
import sys

from pygame.locals import *

pygame.init()

screen=pygame.display.set_mode ((600,375),0,32)
background=pygame.image.load(bif).convert()
mouse_c=pygame.image.load(mif).convert_alpha()

x,y=0,0
movex, movey=0,0

while True:

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

        if event.type==KEYDOWN:
            if event.key==K_LEFT:
                movex=-1
            elif event.key==K_RIGHT:
                movex=+1
            elif event.key==K_UP:
                movey=-1
            elif event.key==K_DOWN:
                movey=+1

        if event.type==KEYUP:
            if event.key==K_LEFT:
                movex=0
            elif event.key==K_RIGHT:
                movex=0
            elif event.key==K_UP:
                movey=0
            elif event.key==K_DOWN:
                movey=0

    x+=movex
    y+=movey

    screen.blit(background,(0,0))
    screen.blit(mouse_c,(x,y))

    pygame.display.update()

问题是,即使我可以向各个方向移动,当我按下右箭头键时,它向右移动,然后如果我一直按住右箭头键并按住左箭头键,它将移动左边,问题是这样的:当我放开右键时,即使我向左走,我的精灵也会停止。

我知道问题是当释放右或左时,x变为0

我想能够保持向右然后向右移动,然后向左按住然后向左移动,但然后向左释放并向右移动,因为我握着正确

我希望我自己解释,我已经尝试了所有内容并在各处搜索,请帮助我,如果有人可以修改我的代码并向我显示,以便我可以分析它,那将是很棒的。

由于

2 个答案:

答案 0 :(得分:1)

在您的事件循环中,使用pygame.key.get_pressed检查密钥的状态:

    while True:
        pressed = pygame.key.get_pressed()
        print(pressed[pygame.K_LEFT], pressed[pygame.K_RIGHT])

例如,请参阅this code

答案 1 :(得分:1)

试试这个:

import pygame
import sys

from pygame.locals import *


bif="bg.jpg"
mif="pkmn.png"


pygame.init()
FPS = 30  # changed for FPS
FPSCLOCK = pygame.time.Clock()  # changed for FPS

screen = pygame.display.set_mode ((600,375),0,32)
background = pygame.image.load(bif).convert()
mouse_c = pygame.image.load(mif).convert_alpha()

move_speed = 5  # changed for FPS
x, y = 0, 0

while True:

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

    pressed = pygame.key.get_pressed()
    if pressed[K_LEFT]:
        x -= move_speed
    if pressed[K_RIGHT]:
        x += move_speed
    if pressed[K_UP]:
        y -= move_speed
    if pressed[K_DOWN]:
        y += move_speed

    screen.blit(background,(0,0))
    screen.blit(mouse_c,(x,y))

    pygame.display.update()
    FPSCLOCK.tick(FPS)  # changed for FPS

编辑1:我正在运行您的代码并注意到您没有任何FPS监控 - 您只是以CPU可以处理它的最大速率运行代码。这将导致以后出现问题,因此我添加了代码以确保您的FPS永远不会超过30。

编辑2:我的旧代码过于复杂;既然你同意左右举行就什么都不做;这会奏效。 (它也将更具可读性,这有助于保护您免受错误)