我的节目是钢琴英雄'在pygame中的游戏,其工作方式与吉他英雄相同,不同之处在于它是用于计算机键盘,而是基于弹钢琴而不是吉他。我使用类似于Synthesia的设计作为我的界面,其中矩形下降到一个' hitline'你必须在合适的时间按下键。
我的问题是,尽管矩形首先绘制并按预期工作,但它们似乎不会更新,因此顶部会停止。换句话说,歌曲中的每个音符都是无限长的。
我觉得这可能是错误的地方,虽然我不是百分百肯定。
def Draw(self,hitLine):
if self.coords[2][1]<hitLine:
self.coords[0][1]+=2
self.coords[1][1]+=2
self.coords[2][1]+=2
self.coords[3][1]+=2
elif self.coords[2][1]>=hitLine and self.coords[0][1]<hitLine:
self.coords[0][1]+=2
self.coords[1][1]+=2
else:
self.drawing = False
pygame.draw.polygon(screen,BLUE,self.coords,0)
pygame.display.update()
这一行位于while循环中,它只是一次更新一首歌曲中的所有矩形。
for z in notes:
if z.drawing:
z.Draw(hitLine)
答案 0 :(得分:1)
我发现你的问题非常有趣,非常有趣!
需要考虑的一些事项。
似乎没有任何理由使用&#34; pygame polygon&#34;对于明显是矩形的Note对象。在下面的代码中,我使用&#34; pygame Rect&#34;对象
您的主循环并不是每帧都清除屏幕。
在主循环中,您需要每帧清除屏幕。在我的代码中,我使用了Rect对象。当笔记的顶部点击hitLine
时,笔记会自动停止绘制。
import pygame
pygame.init()
gameScreen = pygame.display.set_mode((1100, 692))
hitLine = 500
class Note:
def __init__(self, rect):
self.rect = rect
self.drawing = True
def draw(self):
if self.rect.y < hitLine:
self.rect.y += 2
else:
self.drawing = False;
pygame.draw.rect(gameScreen, (0, 0, 255), self.rect, 0)
fNote = Note(pygame.Rect(500, -550, 80, 550))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
gameScreen.fill((0, 0, 0))
if fNote.drawing:
fNote.draw()
pygame.display.update()