【发布时间】:2020-06-26 14:59:15
【问题描述】:
第一次在python 中构建游戏,更不用说pygame。当我启动代码时,带有所需背景的窗口会出现,我的Sprite 会加载到我想要的位置。然而,尽管付出了所有努力,Sprite 还是没有移动。我已经搜索了这个网站和其他网站的解决方案,但无济于事。
注意:我正在使用 OS X 10.11.6 的升级版 2009 年中期 mac book,并且我正在通过终端 (python boss_fight.py) 启动代码。另外,我通过自制软件下载了[tag: pygame]。
我尝试过的其他事情:
-
elif然后if与if然后if语句 - 在有关按键输入的 if 语句之后添加
print函数以查看输入是否已注册,而不是print。 - 列表项在
if语句之后添加print函数,以查看输入是否已注册,而不是print。 - 更新中pygame
- 正在更新python
- 使用命令 pythonw boss_fight.py 启动(这会产生:ImportError: No module named pygame)这很奇怪,因为运行提示 python boss_fight.py 会运行游戏。
- 我尝试了其他一些方法,但记不住了
代码如下:
import pygame # load pygame keywords
import sys # let python use your file system
import os # help python identify your OS
class Player(pygame.sprite.Sprite):
# Spawn a player
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.movex = 0
self.movey = 0
self.frame = 0
self.images = []
img = pygame.image.load(os.path.join('images','hero.png'))
self.images.append(img)
self.image = self.images[0]
self.rect = self.image.get_rect()
def control(self,x,y):
# control player movement
self.movex += x
self.movey += y
def update(self):
# Update sprite position
self.rect.x = self.rect.x + self.movex
self.rect.y = self.rect.y + self.movey
# moving left
if self.movex < 0:
self.frame += 1
if self.frame > 3 * ani:
self.frame = 0
self.image = self.images[self.frame//ani]
# moving right
if self.movex > 0:
self.frame += 1
if self.frame > 3 * ani:
self.frame = 0
self.image = self.images[(self.frame//ani)+4]
# Setup
worldx = 960
worldy = 720
fps = 40 # frame rate
ani = 4 # animation cycles
clock = pygame.time.Clock()
pygame.init()
main = True
BLUE = (25,25,200)
BLACK = (23,23,23 )
WHITE = (254,254,254)
ALPHA = (0,255,0)
world = pygame.display.set_mode([worldx,worldy])
backdrop = pygame.image.load(os.path.join('images','stage.jpeg')).convert()
backdropbox = world.get_rect()
player = Player() # spawn player
player.rect.x = 0
player.rect.y = 0
player_list = pygame.sprite.Group()
player_list.add(player)
steps = 10 # how fast to move
# Main loop
while main:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit(); sys.exit()
main = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.control(-steps,0)
print('left')
elif event.key == pygame.K_RIGHT:
player.control(steps,0)
print('right')
elif event.key == pygame.K_UP:
print('up')
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
player.control(steps,0)
elif event.key == pygame.K_RIGHT:
player.control(-steps,0)
elif event.key == pygame.K_q:
pygame.quit()
sys.exit()
main = False
world.blit(backdrop, backdropbox)
player.update()
player_list.draw(world)
pygame.display.update()
clock.tick(fps)
【问题讨论】:
-
尝试根据stackoverflow.com/a/61766668/51685升级你的PyGame版本——这修复了我的macOS 10.15机器上的问题。
-
除此之外,你的
self.images数组只有一项,所以注释掉那些改变self.image的行,否则你的程序也会崩溃。 -
升级 pygame 有效。谢谢!
标签: python pygame pygame python python python-3.x if-statement pygame sprite