1

私はpygameにプログラムを持っています。さまざまなパーツがありますが、そのうちの 2 つを以下に示します。2 番目のゲームでは、ゲームは通常のペースで進んでいますが、最初のゲームでは、同じティック速度であっても、非常にラグが発生します。足りないものはありますか?ところで、これらのうちの 1 つだけがゲーム ループ サイクルごとに実行されます。で終わる行#が 2 つの間で繰り返されることに注意してください。

for event in pygame.event.get():#
    if event.type==pygame.QUIT:#
        pygame.quit()#
        sys.exit()#
    if event.type==pygame.KEYDOWN:#
        if event.key==pygame.K_ESCAPE:#
            pygame.quit()#
            sys.exit()#
for ball in balls:#
    ball.update(winrect, walls)#
window.fill(WHITE)#
for box in boxes:#
    pygame.draw.rect(window, box[1], box[0])#
for wall in walls:#
    if wall.orientation==0:#
        pygame.draw.rect(window, BLACK, (wall.left, wall.top, wall.ttopleft, wall.height))#
        pygame.draw.rect(window, BLACK, (wall.bbottomright, wall.top, wall.right-wall.bbottomright, wall.height))#
    else:#
        pygame.draw.rect(window, BLACK, (wall.left, wall.top, wall.width, wall.ttopleft))#
        pygame.draw.rect(window, BLACK, (wall.left, wall.bbottomright, wall.width, wall.bottom-wall.holesize))#
for ball in balls:#
    pygame.draw.circle(window, ball.color, ball.center, round(ball.width/2))#
    pygame.draw.circle(window, BLACK, ball.center, round(ball.width/2), 2)#
window.blit(coverso, winrect)
window.blit(texts['complete'][0], texts['complete'][1])
window.blit(stuff[0], stuff[1])
pygame.display.update()#
pygame.time.Clock().tick(100)#

そして2番目のもの:

    #event loop
    for event in pygame.event.get():#
        if event.type==pygame.QUIT:#
            pygame.quit()#
            sys.exit()#
        if event.type==pygame.KEYDOWN:#
            if event.key==pygame.K_ESCAPE:#
                mode='pause'#
    #updates
    updates=[]
    for wall in walls:
        wall.update()
    for ball in balls:#
        updates.append(ball.update(winrect, walls))#similar
    #Seeing if won
    won=True
    for update in updates:
        if not update:
            won=False
    if won:
        if levels[loadinglevel][4]==0:
            levels[loadinglevel][4]=1
        levels[loadinglevel-1][4]=2
        mode='complete'
        stuff=getcomplete(loadinglevel, coins, bigfont, texts['complete'][1].bottom+100, winrect.centerx)
        for wall in walls:
            wall.bbottomright=100000
            wall.ttopleft=90000
        coins+=loadinglevel
    #blitting
    window.fill(WHITE)#
    for box in boxes:#
        pygame.draw.rect(window, box[1], box[0])#
    for wall in walls:#
        if wall.orientation==0:#
            pygame.draw.rect(window, BLACK, (wall.left, wall.top, wall.ttopleft, wall.height))#
            pygame.draw.rect(window, BLACK, (wall.bbottomright, wall.top, wall.right-wall.bbottomright, wall.height))#
        else:#
            pygame.draw.rect(window, BLACK, (wall.left, wall.top, wall.width, wall.ttopleft))#
            pygame.draw.rect(window, BLACK, (wall.left, wall.bbottomright, wall.width, wall.bottom-wall.holesize))#
    for ball in balls:#
        pygame.draw.circle(window, ball.color, ball.center, round(ball.width/2))#
        pygame.draw.circle(window, BLACK, ball.center, round(ball.width/2), 2)#
    pygame.display.update()#
    pygame.time.Clock().tick(100)#
    if mode=='pause':
        window.blit(coverso, winrect)
4

2 に答える 2

0

alexpinho98 の発言に加えて、アルファ サーフェスでカラーキーを使用する必要はありません。代わりに surface.convert_alpha() を使用できます。

次のコードを使用すると、時間を節約でき、.convert_alpha() を繰り返し入力する必要がなくなります。

def loadify(imgname):
    return pygame.image.load(imagename).convert_alpha()
于 2016-01-05T19:36:30.927 に答える
0

最初の部分で繰り返されない行は次のとおりです。

window.blit(coverso, winrect)
window.blit(texts['complete'][0], texts['complete'][1])
window.blit(stuff[0], stuff[1])

アルファを使用していない場合は、サーフェスを作成するときにsurface.convert()を使用することをお勧めします。

アルファを使用している場合は、アルファ サーフェスよりもはるかに高速であるため、カラーキーを使用できます。

計算を高速化するには、Psycoを使用することをお勧めします。

http://www.psyco.sourceforge.net/

于 2013-04-02T16:59:53.657 に答える