Python和Pygame-尝试上下弹跳矩形
我一直在编写一个简单的平台游戏,在这个游戏中,用户控制一个正方形,并且必须到达窗口的另一侧,而不会与其他正方形发生碰撞。我想让其他4个方块上下弹跳,所以我写了以下代码: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
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提前感谢。运行循环时,
的第一行是goingDown=True
。这将在循环的每次迭代开始时将变量设置为true。您需要将行goingDown=True
放在循环之前
应该是这样的:
#GameLoop
goingDown = True
while running:
...
非常感谢你!我现在觉得自己很愚蠢,这么简单的修复=[@user3124364很高兴能帮上忙!如果你觉得有帮助,请记住接受答案。