有可能(在pygame 1.9.6/python 3.8.6中)通过一种方法移动角色吗



所以我目前正在开发一个简单的游戏,到目前为止,这个游戏只有游戏循环和一个用于创建玩家的类。我想保持我的游戏循环干净,所以我决定把用来移动角色的代码放在一个方法"move"中是个好主意,这个方法在玩家被抽中之前在游戏循环的末尾被调用。目前,当我运行代码时,我的角色只是坐在原地,如果我滥发密钥,有时会向左/向右移动,但这似乎很随机。这就是整个代码,方法调用不正确吗?我希望你们能帮我

import pygame
pygame.init()
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
screenWidth, screenHeight = pygame.display.get_surface().get_size()
fpsclock = pygame.time.Clock()
def screen_refresh():
screen.fill((0, 0, 0))
player.move()
player.draw()
pygame.display.update()
fpsclock.tick(60)
class player:
def __init__(self, vel):
self.img = pygame.image.load('player.png')
#self.walk = [pygame.image.load('player_1.png'), pygame.image.load('player_2.png')]
self.width, self.height = self.img.get_size()       
self.x = (screenWidth - self.width) * 0.5
self.y = screenHeight - self.height
self.vel = vel
self.xchange = 0
def move(self):
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
self.xchange += self.vel
if event.key == pygame.K_a:
self.xchange -= self.vel
if event.type == pygame.KEYUP:
if event.key == pygame.K_d:
self.xchange -= self.vel
if event.key == pygame.K_a:
self.xchange += self.vel
self.x += self.xchange
if self.x < 0:
self.x = 0
elif self.x > (screenWidth - self.width):
self.x = screenWidth - self.width
def draw(self):
screen.blit(self.img, (self.x, self.y))
player = player(5)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen_refresh()

您的代码不起作用,因为您有多个对pygame.event.get()的调用。pygame.event.get()获取所有事件消息并将其从队列中删除。因此,只有一个循环将接收事件,另一个循环什么也得不到。这导致事件似乎被错过了。

在主应用程序循环中获取一次事件列表,并将该列表传递给处理它们的函数和方法:

def screen_refresh(events):  # events: list of events 
screen.fill((0, 0, 0))
player.move(events)      # pass events to player.move
player.draw()
pygame.display.update()
fpsclock.tick(60)
class player:
# [...]
def move(self, events): # events: list of events 
for event in events:
# [...]
running = True
while running:
events = pygame.event.get()  # get list of events
for event in events:
if event.type == pygame.QUIT:
running = False
screen_refresh(events)       # pass events to screen_refresh

self.vel=vel其他变量级别在哪里我还想建议先画出玩家,然后移动它。

相关内容

最新更新