gpt4 book ai didi

python - .get_rect() 和 .move IN pygame

转载 作者:行者123 更新时间:2023-12-04 09:25:58 36 4
gpt4 key购买 nike

我正在尝试用 pygame 做一个简单的球运动代码。
在我的循环中,我写道:ballrect = ballrect.move([2,0])将球向右移动if((ballrect.left<0) or (ballrect.right>width)): speed[0]= -speed[0] 当球“击中”水平边缘时反转速度if((ballrect.top<0) or (ballrect.bottom>height)): speed[1] = -speed[1]当球“击中”垂直边缘时反转速度if((ballrect.left==width/2)): speed[0]=0; speed[1]=2当我的球到达显示屏中间时,它将停止水平移动并开始垂直移动。
但是当我的图像底部达到垂直边缘(ballrect.bottom>height)时,如果反转垂直速度,它不会进入第二个。为什么?
完整代码:

import sys, pygame
pygame.init()

size = width, height = 1000, 1000
speed = [2,0]
black = 0

screen = pygame.display.set_mode(size)

ball = pygame.image.load(r"C:\Users\Victor\Desktop\bolinha_de_gorfe.png")
ballrect = ball.get_rect()

while(1):

for event in pygame.event.get():
if(event.type==pygame.QUIT): sys.exit()

ballrect = ballrect.move(speed)
if((ballrect.left<0) or (ballrect.right>width)):
speed[0]= -speed[0]
if((ballrect.top<0) or (ballrect.bottom>height)):
speed[1] = -speed[1]
if((ballrect.left==width/2)):
speed[0]=0
speed[1]=2

screen.fill((0,0,100))
screen.blit(ball,ballrect)
pygame.display.flip()

最佳答案

如果您的问题if条件(ballrect.left==width/2)一旦球击中屏幕中央,它总是 True,所以 speed[1]=2总是被重新设置。因此,即使方向发生变化,该变化也会在以后被覆盖。
解决这个问题的一种方法是将球移动 1 个像素,这样它就不会继续触发“在中间转弯”子句:

if ( ballrect.left==width/2 ):
speed[0]=0
speed[1]=2
ballrect.left = (width//2)-1 # 1 pixel off, so we don't re-trigger
或者您可以设置一个 bool 标志来指示是否进行了转弯:
turned_already = False

...

if ( ballrect.left==width/2 and not turned_already ):
speed[0]=0
speed[1]=2
turned_already = True
您可能希望为代码添加每秒帧数限制。它可以更容易地看到球的运动(而不是整个事情在一瞬间结束)。
clock=pygame.time.Clock()           # <<-- HERE
while(1):

for event in pygame.event.get():
if(event.type==pygame.QUIT):
sys.exit()

ballrect = ballrect.move(speed)
if((ballrect.left<0) or (ballrect.right>width)):
speed[0]= -speed[0]
if((ballrect.top<0) or (ballrect.bottom>height)):
speed[1] = -speed[1]
if ( ballrect.left==width/2 ):
speed[0]=0
speed[1]=2
ballrect.left = (width//2)-1 # 1 pixel off, so we don't re-trigger

screen.fill((0,0,100))
screen.blit( ball, ballrect )
pygame.display.flip()

clock.tick_busy_loop( 60 ) # <<-- AND HERE
这将帧更新限制为每秒 60 帧。

关于python - .get_rect() 和 .move IN pygame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63008509/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com