Python和Pygame-尝试上下弹跳矩形

Python和Pygame-尝试上下弹跳矩形,python,pygame,bounce,Python,Pygame,Bounce,我一直在编写一个简单的平台游戏,在这个游戏中,用户控制一个正方形,并且必须到达窗口的另一侧,而不会与其他正方形发生碰撞。我想让其他4个方块上下弹跳,所以我写了以下代码: import pygame import os import sys os.environ['SDL_VIDEO_CENTERED'] = "1" pygame.init() #Variables: width = 600 height = width / 16 * 9 running = True #Colors PI

我一直在编写一个简单的平台游戏,在这个游戏中,用户控制一个正方形,并且必须到达窗口的另一侧,而不会与其他正方形发生碰撞。我想让其他4个方块上下弹跳,所以我写了以下代码:

import pygame
import os
import sys

os.environ['SDL_VIDEO_CENTERED'] = "1"
pygame.init()

#Variables:
width = 600
height = width / 16 * 9

running = True

#Colors
PINK = (255, 79, 161)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255)

clock = pygame.time.Clock()

#MainRectProperties
mainRectX = 0
mainRectY = height / 2 - 20
mainRectSpeed = 250

#RectOneProperties:
rectOneX = 150
rectOneY = 0

#RectTwoPropeties:
rectTwoX = 250
rectTwoY = height - 20

#RectThreeProperties:
rectThreeX = 350
rectThreeY = 0

#RectFourProperties:
rectFourX = 450
rectFourY = height - 20

#Window:
window = pygame.display.set_mode((width, height))
windowText = pygame.display.set_caption("Pixel Animation")

#Rectangles:
mainRect = pygame.draw.rect(window, PINK, (mainRectX, mainRectY, 20, 20), 0)
obstacleRect1 = pygame.draw.rect(window, BLUE, (rectOneX, rectOneY, 20, 20), 0)
obstacleRect2 = pygame.draw.rect(window, BLUE, (rectTwoX, rectTwoY, 20, 20,), 0)
obstacleRect3 = pygame.draw.rect(window, BLUE, (rectThreeX, rectThreeY, 20, 20), 0)
obstacleRect4 = pygame.draw.rect(window, BLUE, (rectFourX, rectFourY, 20, 20), 0)
pygame.display.flip()

#UpdateMainRectFunction
def updateMainRect(x, y):
    window.fill(BLACK)
    mainRect = pygame.draw.rect(window, PINK, (mainRectX, mainRectY, 20, 20), 0)
    pygame.display.flip()
    clock.tick(250)

#GameLoop
while running:
    goingDown = True
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    if rectOneY < height - 21 and goingDown:
        print "b"
        pygame.draw.rect(window, BLACK, (rectOneX, rectOneY, 20, 20), 0)
        rectOneY += 1
        obstacleRect1 = pygame.draw.rect(window, BLUE, (rectOneX, rectOneY, 20, 20), 0)
        pygame.display.flip()
        clock.tick(100)
        if rectOneY == height - 21:
            goingDown = False
        else:
            goingDown = True

    if not goingDown and rectOneY != 0:
        print "a"
        pygame.draw.rect(window, BLACK, (rectOneX, rectOneY, 20, 20), 0)
        rectOneY -= 1
        obstacleRect1 = pygame.draw.rect(window, BLUE, (rectOneX, rectOneY, 20, 20), 0)
        pygame.display.flip()
        clock.tick(100)
        goingDown = False
        print rectOneY < height - 21 and goingDown     


    keys = pygame.key.get_pressed()
    #MovingRectCommands
    if keys[pygame.K_UP]:
        mainRectY -= 1
        updateMainRect(mainRectX, mainRectY)

    if keys[pygame.K_DOWN]:
        mainRectY += 1
        updateMainRect(mainRectX, mainRectY)

    if keys[pygame.K_LEFT]:
        mainRectX -= 1
        updateMainRect(mainRectX, mainRectY)

    if keys[pygame.K_RIGHT]:
        mainRectX += 1
        updateMainRect(mainRectX, mainRectY)
导入pygame
导入操作系统
导入系统
os.environ['SDL_VIDEO_Center']=“1”
pygame.init()
#变量:
宽度=600
高度=宽度/16*9
运行=真
#颜色
粉红色=(255、79、161)
黑色=(0,0,0)
蓝色=(0,0255)
clock=pygame.time.clock()
#主要属性
mainRectX=0
mainRectY=高度/2-20
维护速度=250
#RectOneProperties:
直肠肌X=150
直肠Y=0
#不动产:
rectTwoX=250
rectTwoY=高度-20
#以下三个属性:
矩形X=350
Y=0
#酒店物业:
RECTFORX=450
Y=高度-20
#窗口:
window=pygame.display.set_模式((宽度、高度))
windowText=pygame.display.set_标题(“像素动画”)
#矩形:
mainRect=pygame.draw.rect(窗口,粉红色,(mainRectX,mainRectY,20,20),0)
obstacleRect1=pygame.draw.rect(窗口,蓝色,(rectOneX,rectOneY,20,20),0)
obstaclerlect2=pygame.draw.rect(窗口,蓝色,(rectTwoX,rectTwoY,20,20,),0)
obstacleRect3=pygame.draw.rect(窗口,蓝色,(rectThreeX,rectThreeY,20,20),0)
obstacleRect4=pygame.draw.rect(窗口,蓝色,(rectFourX,rectFourY,20,20),0)
pygame.display.flip()
#UpdateMainRect函数
def updateMainRect(x,y):
窗口填充(黑色)
mainRect=pygame.draw.rect(窗口,粉红色,(mainRectX,mainRectY,20,20),0)
pygame.display.flip()
时钟滴答(250)
#游戏圈
运行时:
下降=真
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
sys.exit()
如果直肠<高度-21且向下:
打印“b”
pygame.draw.rect(窗口,黑色,(矩形,矩形,20,20),0)
直肠肌+=1
obstacleRect1=pygame.draw.rect(窗口,蓝色,(rectOneX,rectOneY,20,20),0)
pygame.display.flip()
时钟滴答(100)
如果rectOneY==高度-21:
下降=错误
其他:
下降=真
如果不下去直挺挺的话!=0:
打印“a”
pygame.draw.rect(窗口,黑色,(矩形,矩形,20,20),0)
直肠-=1
obstacleRect1=pygame.draw.rect(窗口,蓝色,(rectOneX,rectOneY,20,20),0)
pygame.display.flip()
时钟滴答(100)
下降=错误
打印直线<高度-21和向下
keys=pygame.key.get_pressed()
#movingRect命令
如果键[pygame.K_UP]:
主要-=1
updateMainRect(mainRectX,mainRectY)
如果键[pygame.K_DOWN]:
mainRectY+=1
updateMainRect(mainRectX,mainRectY)
如果键[pygame.K_左]:
mainRectX-=1
updateMainRect(mainRectX,mainRectY)
如果键[pygame.K_RIGHT]:
mainRectX+=1
updateMainRect(mainRectX,mainRectY)
基本上,矩形从屏幕顶部开始,然后成功地到达底部。正如预期的那样,它会将大量的“b”打印到控制台。然后,矩形向上移动一个像素,程序向控制台打印一个“a”,但随后它再次向下移动,即使“if not down and rectOneY!=0”表达式等于True,“if rectOneY 我已经试着解决这个问题至少一个小时了,但我实在不明白出了什么问题,我需要一些帮助

我想让您指出我的代码有什么问题(只是我要问的具体问题,而不是xD之前的数百万个错误代码示例)


提前感谢。

运行循环时,
的第一行是
goingDown=True
。这将在循环的每次迭代开始时将变量设置为true。您需要将行
goingDown=True
放在循环之前

应该是这样的:

#GameLoop
goingDown = True
while running:
    ...

非常感谢你!我现在觉得自己很愚蠢,这么简单的修复=[@user3124364很高兴能帮上忙!如果你觉得有帮助,请记住接受答案。