如果我按下一个键,然后又太快按下另一个键,我的pygame精灵就会停止移动

2024-10-06 12:32:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我是pygame新手,所以我的代码有点混乱,但我希望你能帮助我。当我让一个精灵移动的时候,它工作得很好,但是如果我切换按键的速度很快,或者我按下跳转按钮然后放手,我的精灵就停止移动了。在

import shelve
import sys, pygame, pygame.mixer
import time
from pygame.locals import *
import random
pygame.init()
shelfFile = shelve.open('save_game')

#screen
sise = width, hight = 700, 600
red = 30,30,30
screen = pygame.display.set_mode(sise)

pygame.display.set_caption('Thing')

#varuables
background = pygame.image.load('background.png')
player = pygame.image.load('you.png')
enemy1 = pygame.image.load('enemy1.png')
clock = pygame.time.Clock()
px = shelfFile['px']
py = shelfFile['py']
health = shelfFile['health']
x2 = 0

x = 0
y = 0
u = 0
d = 0
t = 0
r = 0

ex = 0
ey = 0


cutseane = shelfFile ['cutseane']
black = 255,255,255

Punch = False

color = 255,0,0
radius = 5


room = shelfFile['room']

ehealth = shelfFile['ehealth']


while True:
    pygame.event.get()
    if jump == 1:
        y = -20
    if py <= 200:
        jump = 2
    if jump == 2:
        y = +20
    if py >= 480:
        py = 480

                #The Wall
    if px <= 0:
        px = 0
    if px >= 630:
        px = 630
    pygame.display.flip()
    screen.blit(background,(1,1))
    screen.blit(player,(px,py))
    #if ehealth >= 1:
        #screen.blit(enemy1,(ex,ey))
    #else:
        #ex = 0
        #ey = 0
                px = px + x 
    py = py + y
    clock.tick(30)
    for event in pygame.event.get():
        keys = pygame.key.get_pressed()



        if event.type == KEYDOWN and event.key == pygame.K_ESCAPE:
            shelfFile['px'] = px
            shelfFile['py'] = py
            shelfFile['health'] = health
            shelfFile['ehealth'] = ehealth
            shelfFile['cutseane'] = cutseane
            shelfFile['room'] = room
            shelfFile.close()
            pygame.quit(); sys.exit();



                    #Player Movement
        elif event.type == pygame.KEYDOWN:
            if keys [pygame.K_0]:
                health -= 1
                text = 1
                shelfFile['text'] = text
            elif event.key == pygame.K_RIGHT:
                x = -15
            elif event.key == pygame.K_LEFT:
                x = +15
            elif event.key == pygame.K_UP:
                y = +15
            elif event.key == pygame.K_DOWN:
                y = -15
        elif event.type == KEYUP:
            if event.key == pygame.K_LEFT and x > 0:
                x = 0
            elif event.key == pygame.K_RIGHT and x < 0:
                x = 0
            elif event.key == pygame.K_UP and x > 0:
                y = 0
            elif event.key == pygame.K_DOWN and x < 0:
                y = 0

Tags: andkeypyimporteventifscreenpygame
2条回答

你的事件循环真的一团糟,应该重组。keys = pygame.key.get_pressed()不应在事件循环中调用,而应在外部while循环中调用。我有一个最小的例子来展示一种进行移动和事件处理的方法(只使用事件循环而不使用key.get_pressed)。在

import sys
import pygame


pygame.init()

screen = pygame.display.set_mode((700, 600))
clock = pygame.time.Clock()

player = pygame.Surface((30, 30))
player.fill((120, 240, 90))

px = 100
py = 200
x_speed = 0
y_speed = 0

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            # If player is on the ground, jump (in more advanced
            # games you need collision detection instead >= 480).
            if event.key == pygame.K_UP and py >= 480:
                y_speed = -20
            elif event.key == pygame.K_RIGHT:
                x_speed = 10
            elif event.key == pygame.K_LEFT:
                x_speed = -10
        elif event.type == pygame.KEYUP:
            # If player is moving right, stop him.
            if event.key == pygame.K_RIGHT and x_speed > 0:
                x_speed = 0
            # If player is moving left, stop him.
            elif event.key == pygame.K_LEFT and x_speed < 0:
                x_speed = 0

    # Don't jump too high.
    if py <= 200:
        y_speed = 20
    # Don't go below y = 480.
    if py >= 480:
        py = 480

    # Move the player.
    px += x_speed
    py += y_speed
    # The Wall.
    if px <= 0:
        px = 0
    if px >= 630:
        px = 630

    screen.fill((50, 50, 50))
    screen.blit(player, (px, py))

    pygame.display.flip()
    clock.tick(30)

我认为问题是在某些地方,你写了y = +20,而不是{}。如果您希望y增加20个单位,请执行y += 20,如果您想将y设置为值20,请执行y = 20(与y = +20执行相同的操作)。我不知道你想做什么,因为我没有你的png文件,我不能运行程序看看会发生什么。另外,如果这是一个无意的错误,那么您对负片和代码的其他部分也做了同样的操作。在

这并不是一个真正的错误,如果不更正它会起作用,但是你也拼写错了一些东西(如果是故意的,忽略这个)

sise应该有大小, 高度应该是高度, cutseane应该是cutseane。。。在

还有其他错误。如果所有这些都能正常工作,而且它们不仅仅是打字错误,那么您可能正在使用我不知道的python版本。在

相关问题 更多 >