我正在嘗試使用 Pygame 為學校制作一個空閑唱首歌游戲,我遇到了一些問題,我真的很感激一些幫助
我想在當前敵人的 hp 達到 0 時替換螢屏上的敵人,但是當我在敵人 HP 達到 0 時繪制第二張影像時,第一張影像沒有被替換,有人可以幫我解決這個問題嗎
提前致謝
import pygame
pygame.init()
pygame.font.init()
colours = {"White" : (255, 255, 255), "Black" : (0, 0, 0), "Red" : (255, 0, 0), "Blue" : (0, 0, 255), "Green" : (0, 255, 0)}
orighpamt = 10
class Screen():
def __init__(self, title, width=400, height=600, fill=colours["White"]):
self.title=title
self.width=width
self.height = height
self.fill = fill
self.current = False
def makeCurrent(self):
pygame.display.set_caption(self.title)
self.current = True
self.screen = pygame.display.set_mode((self.width, self.height))
def endCurrent(self):
self.current = False
def checkUpdate(self):
return self.current
def screenUpdate(self):
if(self.current):
self.screen.fill(self.fill)
def returnTitle(self):
return self.screen
class Button():
def __init__(self, x, y, sx, sy, bcolour, fbcolour, font, fontsize, fcolour, text):
self.x = x
self.y = y
self.sx = sx
self.sy = sy
self.bcolour = bcolour
self.fbcolour = fbcolour
self.fcolour = fcolour
self.fontsize = fontsize
self.text = text
self.current = False
self.buttonf = pygame.font.SysFont(font, fontsize)
def showButton(self, display):
if(self.current):
pygame.draw.rect(display, self.fbcolour, (self.x, self.y, self.sx, self.sy))
else:
pygame.draw.rect(display, self.bcolour, (self.x, self.y, self.sx, self.sy))
textsurface = self.buttonf.render(self.text, False, self.fcolour)
display.blit(textsurface, ((self.x (self.sx/2) - (self.fontsize/2)*(len(self.text)/2) - 5,(self.y (self.sy/2) -(self.fontsize/2) - 4))))
def focusCheck(self, mousepos, mouseclick):
if(mousepos[0] >= self.x and mousepos[0] <= self.x self.sx and mousepos[1] >= self.y and mousepos[1] <= self.y self.sy):
self.current = True
return mouseclick
else:
self.current = False
return False
class Enemy(pygame.sprite.Sprite):
def __init__(self, dx, dy, filename):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(filename).convert()
self.rect = self.image.get_rect()
self.rect.x = dx
self.rect.y = dy
def draw(self, screen):
screen.blit(self.image, self.rect)
menuScreen = Screen("Menu Screen")
screen2 = Screen("Screen 2")
win = menuScreen.makeCurrent()
done = False
font = pygame.font.Font('freesansbold.ttf', 32)
clickdamage = 1
hitpoints = orighpamt
DungeonButton = Button(125, 500, 150, 50, colours["Black"], colours["Blue"], "arial", 20, colours["White"], "Dungeon")
hitboxButton = Button(80, 50, 280, 400, colours["White"], colours["Red"], "arial", 20, colours["White"], "")
hitpointamount = Button(100, 0, 200, 50, colours["White"], colours["Black"], "arial", 20, colours["Black"], str(hitpoints))
goblin = Enemy(0 , 20, "images\goblin-resized.png")
goblin2 = Enemy(0 , 20, "images\goolin.png")
toggle = False
while not done:
menuScreen.screenUpdate()
screen2.screenUpdate()
mouse_pos = pygame.mouse.get_pos()
keys = pygame.key.get_pressed()
mouse_click = False
for event in pygame.event.get():
if(event.type == pygame.QUIT):
done = True
if event.type == pygame.MOUSEBUTTONDOWN:
mouse_click = True
if menuScreen.checkUpdate():
attack = hitboxButton.focusCheck(mouse_pos, mouse_click)
hitboxButton.showButton(menuScreen.returnTitle())
goblin.draw(menuScreen.screen)
hitpointamount.showButton(menuScreen.returnTitle())
if attack:
hitpoints -= clickdamage
if hitpoints < 0:
hitpoints = 0
hitpointamount = Button(100, 0, 200, 50, colours["White"], colours["Black"], "arial", 20, colours["Black"], str(hitpoints))
hitpointamount.showButton(menuScreen.returnTitle())
if hitpoints == 0:
goblin2.draw(menuScreen.screen)
menuScreen.screenUpdate()
orighpamt = round(orighpamt * 1.5)
hitpoints = orighpamt
hitpointamount = Button(100, 0, 200, 50, colours["White"], colours["Black"], "arial", 20, colours["Black"], str(hitpoints))
hitpointamount.showButton(menuScreen.returnTitle())
pygame.display.update()
elif screen2.checkUpdate():
returnm = DungeonButton.focusCheck(mouse_pos, mouse_click)
if returnm:
win = menuScreen.makeCurrent()
screen2.endCurrent()
pygame.display.update()
pygame.quit()
uj5u.com熱心網友回復:
[這是我的第一個回答,請給我一點懈怠]
在顯示精靈時,跟蹤您正在顯示的精靈是至關重要的。當前代碼最干凈的解決方案是使用跟蹤變數,如“currentGoblin”。
currentGoblin = 0
每次你的地精被殺死時,將該變數增加 1。現在,渲染你的精靈。洗掉goblin2.draw(),沒必要。在您繪制第一個精靈(地精)的地方,將代碼替換為:
if currentGoblin == 0:
goblin.draw(menuScreen.screen)
elif currentGoblin == 1:
goblin2.draw(menuScreen.screen)
# etc, so you can add more goblin images
您的代碼的缺陷在于您不會永久更改影像/精靈,直到它重新顯示。
本質上,此修復所做的是顯示您正在處理的任何地精,并在它被殺死時移動到下一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352749.html
