我在pygame中做了一個非常非常基本的遊戲,其中唯一可能的動作是向左移動,向右移動並向上射擊子彈。我的問題是,當我射擊時,我的球員精靈在子彈向上移動時保持不動。我該如何補救?我對pygame很陌生,所以我會很感激任何和所有的幫助。我需要精靈在射擊子彈後繼續移動
#importing needed libraries
import pygame,sys
from pygame.locals import *
#Class for the Player
class Player():
def __init__(self,surf,xpos,ypos):
self.image=pygame.image.load("cat1.png").convert_alpha()
self.x=xpos
self.y=ypos
self.surface=surf
def keys(self):
dist=10
key=pygame.key.get_pressed()
if key[pygame.K_RIGHT]:
if self.x<500:
self.x+=dist
elif key[pygame.K_LEFT]:
if self.x!=0:
self.x-=dist
def draw(self,surface):
self.surface.blit(self.image,(self.x,self.y))
#Class for the bullet which inherits the Player Class
class Weapon(Player):
def __init__(self,surf,xpos,ypos,bg,wxpos,wypos):
Player.__init__(self,surf,xpos,ypos)
self.wimage=pygame.image.load("bullet.png").convert_alpha()
self.wx=wxpos
self.wy=wypos
self.background=bg
def Shoot(self):
dist=10
while self.wy>0:
self.surface.blit(self.background,(0,0))
self.surface.blit(self.image,(self.x,self.y))
self.surface.blit(self.wimage,(self.wx,self.wy))
self.wy-=dist
pygame.display.update()
#initialising pygame
pygame.init()
FPS=30
fpsClock=pygame.time.Clock()
#creating display window
DISPLAYSURF=pygame.display.set_mode((577,472),0,32)
pygame.display.set_caption('Animation')
WHITE = (255, 255, 255)
background=pygame.image.load("background.png")
DISPLAYSURF.fill(WHITE)
#creating player
player=Player(DISPLAYSURF,50,360)
#main game loop
while True:
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
elif event.type==MOUSEBUTTONDOWN:
weapon=Weapon(DISPLAYSURF,player.x,player.y,background,player.x+25,player.y)
player.draw(DISPLAYSURF)
weapon.Shoot()
player.keys()
DISPLAYSURF.blit(background,(0,0))
player.draw(DISPLAYSURF)
pygame.display.update()
fpsClock.tick(FPS)
沒有詳細說明在這裏做這樣的方式,但你需要使用一個線程或子程序。基本上,你想要的是有許多對象同時運行,所以你需要並行化他們的行爲。 –
你不能在'Shoot'中使用'while'循環。你必須在'while True'(主循環)內移動它。 – furas
'射擊'必須是類 - 類似於玩家 - 使用'draw()'來顯示和'更新()'在主循環的每個循環中只移動幾個像素。 Mainloop會做所有的工作。 – furas