pygame.display.update runs after pygame.time.wait(1000)

故事扮演 提交于 2020-02-25 06:44:25

问题


I am working through a tutorial. The tutorial can be found here https://inventwithpython.com/makinggames.pdf

The main script i am referring to can be found here https://inventwithpython.com/memorypuzzle.py

There is a bug in this program that I have been trying to resolve for days. In the main game loop

`

while True: # main game loop
    mouseClicked = False

    DISPLAYSURF.fill(BGCOLOR) # drawing the window
    drawBoard(mainBoard, revealedBoxes)

    for event in pygame.event.get(): # event handling loop
        if event.type == QUIT or (event.type == KEYUP and event.key == K_ESCAPE):
            pygame.quit()
            sys.exit()
        elif event.type == MOUSEMOTION:
            mousex, mousey = event.pos
        elif event.type == MOUSEBUTTONUP:
            mousex, mousey = event.pos
            mouseClicked = True

    boxx, boxy = getBoxAtPixel(mousex, mousey)
    if boxx != None and boxy != None:
        # The mouse is currently over a box.
        if not revealedBoxes[boxx][boxy]:
            drawHighlightBox(boxx, boxy)
        if not revealedBoxes[boxx][boxy] and mouseClicked:
            revealBoxesAnimation(mainBoard, [(boxx, boxy)])
            revealedBoxes[boxx][boxy] = True # set the box as "revealed"
            if firstSelection == None: # the current box was the first box clicked
                firstSelection = (boxx, boxy)
            else: # the current box was the second box clicked
                # Check if there is a match between the two icons.
                icon1shape, icon1color = getShapeAndColor(mainBoard, firstSelection[0], firstSelection[1])
                icon2shape, icon2color = getShapeAndColor(mainBoard, boxx, boxy)

                if icon1shape != icon2shape or icon1color != icon2color:

                    # Icons don't match. Re-cover up both selections.
                    # I think the problem is here
                    # I think the problem is here

                    pygame.time.wait(1000) # 1000 milliseconds = 1 sec
                    coverBoxesAnimation(mainBoard, [(firstSelection[0], firstSelection[1]), (boxx, boxy)])
                    revealedBoxes[firstSelection[0]][firstSelection[1]] = False
                    revealedBoxes[boxx][boxy] = False
                elif hasWon(revealedBoxes): # check if all pairs found
                    gameWonAnimation(mainBoard)
                    pygame.time.wait(2000)

                    # Reset the board
                    mainBoard = getRandomizedBoard()
                    revealedBoxes = generateRevealedBoxesData(False)

                    # Show the fully unrevealed board for a second.
                    drawBoard(mainBoard, revealedBoxes)
                    pygame.display.update()
                    pygame.time.wait(1000)

                    # Replay the start game animation.
                    startGameAnimation(mainBoard)
                firstSelection = None # reset firstSelection variable

    # Redraw the screen and wait a clock tick.
    pygame.display.update()
    FPSCLOCK.tick(FPS)

` what is happening?

The pygame.display.update() will reveal the second card selected but only for a fraction of a second.

The behavior I am trying to achieve => The behavior i am trying to achieve is when a user clicks the first card it reveals itself then when the user clicks a second card it reveals itself. the game then waits a second with pygame.time.wait(1000). This is to reveal both cards for that set number of time before the loop continues to execute and covers both cards up again if they are not equal.

I would like to tell the author so nobody else get stuck.

来源:https://stackoverflow.com/questions/55191938/pygame-display-update-runs-after-pygame-time-wait1000

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!