(在pygame 1.9.6/Python3.8.6中)可以通过方法移动角色吗?
因此,我目前正在开发一个简单的游戏,到目前为止,它只有一个游戏循环和一个用于创建玩家的类。我想保持我的游戏循环干净,所以我决定将用于移动角色的代码放入“move”方法中是一个好主意,该方法在绘制玩家之前在游戏循环结束时调用。目前,当我运行代码时,我的角色只是坐在原地,如果我发垃圾邮件的话,有时会向左/向右移动,但这看起来很随机。这是全部代码,方法调用是否不正确/每个勾号?我希望你们能帮助我(在pygame 1.9.6/Python3.8.6中)可以通过方法移动角色吗?,python,methods,pygame,Python,Methods,Pygame,因此,我目前正在开发一个简单的游戏,到目前为止,它只有一个游戏循环和一个用于创建玩家的类。我想保持我的游戏循环干净,所以我决定将用于移动角色的代码放入“move”方法中是一个好主意,该方法在绘制玩家之前在游戏循环结束时调用。目前,当我运行代码时,我的角色只是坐在原地,如果我发垃圾邮件的话,有时会向左/向右移动,但这看起来很随机。这是全部代码,方法调用是否不正确/每个勾号?我希望你们能帮助我 import pygame pygame.init() screen = pygame.display
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()
self.vel=vel
其他变量vel在哪里
我还想建议先画出玩家,然后移动它。self.vel=vel
其他变量vel在哪里
我还建议先画播放器,然后移动它。您的代码不起作用,因为您有多个调用。pygame.event.get获取所有事件消息并将其从队列中删除。因此,只有一个循环将接收事件,而另一个循环什么也得不到。这导致事件似乎被错过 在主应用程序循环中获取一次事件列表,并将该列表传递给处理它们的函数和方法: def屏幕刷新事件:事件:事件列表 screen.fill0,0,0 player.moveevents将事件传递给player.move 打平 pygame.display.update fpscall.tick60 职业球员: [...] def moveself,事件:事件:事件列表 对于事件中的事件: [...] 运行=真 运行时: events=pygame.event.get事件列表 对于事件中的事件: 如果event.type==pygame.QUIT: 运行=错误 screen\u refresh事件将事件传递到screen\u refresh
您的代码不起作用,因为您有多个对的调用。pygame.event.get获取所有事件消息并将其从队列中删除。因此,只有一个循环将接收事件,而另一个循环什么也得不到。这导致事件似乎被错过 在主应用程序循环中获取一次事件列表,并将该列表传递给处理它们的函数和方法: def屏幕刷新事件:事件:事件列表 screen.fill0,0,0 player.moveevents将事件传递给player.move 打平 pygame.display.update fpscall.tick60 职业球员: [...] def moveself,事件:事件:事件列表 对于事件中的事件: [...] 运行=真 运行时: events=pygame.event.get事件列表 对于事件中的事件: 如果event.type==pygame.QUIT: 运行=错误 screen\u refresh事件将事件传递到screen\u refresh