【问题标题】:Rectangle won't stop moving矩形不会停止移动
【发布时间】:2020-02-15 09:09:16
【问题描述】:

我在我的代码中使用pygame.key.get_pressed() 来使矩形上下移动,但是当我放开按键时,矩形继续移动。我想知道如何在释放键时使矩形停止移动。

    import pygame, random, sys
    from pygame.locals import *
    fpsClock=pygame.time.Clock()
    pygame.init()

    WINDOWWIDTH = 600
    WINDOWHEIGHT = 600
    TEXTCOLOR = (255, 255, 255)
    BACKGROUNDCOLOR = (0, 0, 255)
    FPS = 40
    BLACK = (0,0,0)
    RED = (255, 0, 0)
    BLUE = (0, 0, 255)
    rectY1 = 300
    rectY2 = 300
    Y1change = 0
    Y2change = 0


    def moveup():
        rectY1 -= 10
    pygame.display.set_caption('Pong')
    def drawshapes():
        pygame.init()
        DISPLAY=pygame.display.set_mode((600,600),0,32)
        DISPLAY.fill(BLACK)
        pygame.draw.rect(DISPLAY,RED,(18,rectY1,10,120))
        pygame.draw.rect(DISPLAY,RED,(580,rectY2,10,120))
        pygame.draw.ellipse(DISPLAY,BLUE,(300,300,30,30))
    drawshapes()

    while True:
        for event in pygame.event.get():
            if event.type==QUIT:
                pygame.quit()
                sys.exit()
        keys = pygame.key.get_pressed()
        if keys[K_UP]:
            Y1change -= 10
        if keys[K_DOWN]:
            Y1change += 10




        rectY1 += Y1change
        rectY2 += Y2change
        drawshapes()
        pygame.display.update()






        fpsClock.tick(FPS)
        pygame.display.update()

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    你必须在每次测试前重置它

    Y1change = 0
    
    if keys[K_UP]:
        Y1change -= 10
    
    if keys[K_DOWN]:
        Y1change += 10
    

    import random
    import sys
    import pygame
    
    # --- constants (UPPERCASE_NAMES) ---
    
    WINDOWWIDTH = 600
    WINDOWHEIGHT = 600
    TEXTCOLOR = (255, 255, 255)
    BACKGROUNDCOLOR = (0, 0, 255)
    FPS = 40
    BLACK = (0,0,0)
    RED = (255, 0, 0)
    BLUE = (0, 0, 255)
    
    # --- classes (CamelCaseNames)---
    
    # empty
    
    # --- functions (lower_case_names)---
    
    def move_up():
        global rectY1
    
        rectY1 -= 10
    
    def draw_shapes():
        pygame.draw.rect(DISPLAY, RED, (18, rectY1, 10, 120)) # spaces
        pygame.draw.rect(DISPLAY, RED, (580, rectY2, 10, 120)) # spaces
        pygame.draw.ellipse(DISPLAY, BLUE, (300, 300, 30, 30)) # spaces
    
    # --- main ---
    
    rectY1 = 300
    rectY2 = 300
    Y1change = 0
    Y2change = 0
    
    # - init -
    
    pygame.init()
    DISPLAY = pygame.display.set_mode((600, 600), 0, 32) # spaces
    pygame.display.set_caption('Pong')
    
    #TODO: use pygame.Rect() to keep size and position of paddles and ball
    
    # - mainloop -
    
    fpsClock = pygame.time.Clock()
    
    while True:
    
        # - events -
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
    
        # - changes -
    
        keys = pygame.key.get_pressed()
    
        Y1change = 0
    
        if keys[pygame.K_UP]:
            Y1change -= 10
    
        if keys[pygame.K_DOWN]:
            Y1change += 10
    
        # - updates -
    
        rectY1 += Y1change
        rectY2 += Y2change
    
        # - draws -
    
        DISPLAY.fill(BLACK)
        draw_shapes()
        pygame.display.update() # only once in loop
    
        # - FPS -
    
        fpsClock.tick(FPS)
    

    【讨论】:

    • 您能否添加功能以使用户可以在按下按钮时连续移动?
    • 我明白了。我仍然赶上了 OP 的版本。
    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多