如何解决使用pygame,如何更新类定义的对象位置
我正在尝试用Python构建Google Dinosaur游戏。我有
class Dino():
def __init__(self,posy):
self.score = 0
self.isDead = False
self.isJumping = False
self.isDucking = False
self.pos = (100,posy)
def draw(self):
dinoImport = pygame.image.load("assets\dino1.png")
dino = pygame.transform.scale(dinoImport,(50,50))
screen.blit(dino,self.pos)
然后我拥有游戏实际运行的主要功能。
def gameplay():
global flag
flag = True
color = (255,255,255)
y = 300
playerDino = Dino(y)
gamespeed = 4
ground = Ground(-1*gamespeed)
while flag:
screen.fill(color)
ground.draw()
playerDino.draw()
pygame.display.flip()
events = pygame.event.get()
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
exit(0)
keys = pygame.key.get_pressed()
if keys[pygame.K_s]:
pass
if keys[pygame.K_w]:
y += 3
playerDino.draw()
pygame.display.update()
一切都正确放置,但是当我按w键时,恐龙的y位置不会向上移动3,它也不会移动。我到底在这里想念什么?
解决方法
恐龙的坐标存储在属性pos
的元组中。您必须更改元组属性,而不是y
:
y += 3
playerDino.pos = (playerDino.pos[0],playerDino.pos[1] + 3)
无论如何,我建议使用pygame.Rect
对象作为恐龙的位置。您可以通过pygame.Surface
从get_rect
对象获得矩形。将 Surface 加载到Dino
的构造函数中,而不是在每个帧中加载:
class Dino():
def __init__(self,posy):
self.score = 0
self.isDead = False
self.isJumping = False
self.isDucking = False
dinoImport = pygame.image.load("assets\dino1.png").convert_alpha()
self.image = pygame.transform.scale(dinoImport,(50,50))
self.rect = self.image.get_rect(topleft = (100,posy))
def draw(self):
screen.blit(self.image,self.rect)
可以通过更改playerDino
属性来更改rect
的位置。由于多次调用pygame.event.get()
,因此事件循环将无法正常工作。由于pygame.event.get()
从队列中删除了事件,因此第二次调用不会返回任何事件。删除pygame.event.get()
的第一个电话:
def gameplay():
global flag
color = (255,255,255)
playerDino = Dino(300)
gamespeed = 4
ground = Ground(-1*gamespeed)
clock = pygame.time.Clock()
flag = True
while flag:
clock.tick(60)
for event in pygame.event.get():
if event.type==pygame.QUIT:
flag = False
keys = pygame.key.get_pressed()
if keys[pygame.K_s]:
pass
if keys[pygame.K_w]:
playerDino.rect.y += 3
screen.fill(color)
ground.draw()
playerDino.draw()
pygame.display.flip()
pygame.quit()
exit(0)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。