import sys, pygame
import random
pygame.init()
x=0.5
speed = [x, x]
size = width, height = 800, 600
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
Sair = True
while Sair:
for event in pygame.event.get():
if event.type == pygame.QUIT: Sair=False
ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
x=random.uniform(0, 1)
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]
x=random.uniform(0, 1)
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
sys.exit()
我希望球会移动并且每次击中转角速度都会发生变化。
答案 0 :(得分:2)
要使球移动,您必须添加一个位置变量,该位置变量在每一帧中均以速度递增。最后,必须根据以下位置更新球形矩形:
pos = [0, 0]
while Sair:
for event in pygame.event.get():
if event.type == pygame.QUIT: Sair=False
if ballrect.left < 0 or ballrect.right > width:
x = random.uniform(0.1, 1)
speed[0] = x if speed[0] < 0.0 else -x
if ballrect.top < 0 or ballrect.bottom > height:
x = random.uniform(0.1, 1)
speed[1] = x if speed[1] < 0.0 else -x
pos[0] += speed[0]
pos[1] += speed[1]
ballrect.topleft = (int(pos[0]), int(pos[1]))
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
请注意,pygame.Rect
的坐标是整数值。如果将小于1的正浮点值加到整数值,则该值根本不会改变,因为结果会再次被截断为整数部分。
int a = 1
a + 0.5 == 1
确保随机速度始终大于0.0。生成随机速度并根据新方向更改speed
:
例如
x = random.uniform(0.1, 1)
speed[0] = x if speed[0] < 0.0 else -x
答案 1 :(得分:1)
尝试使用speed[0] = random.uniform(0, 1)
而不是x = random.uniform(0, 1)
。更改x
时,不会更改列表speed
中的值。这是因为整数是不可变的,这意味着它们不能更改。当您执行x = random.uniform(0, 1)
时,您只是在创建一个新整数并将x
绑定到该整数。
答案 2 :(得分:0)
如果只有0.1,为什么不使用random.random-它做同样的事情。 Random.uniform用于获取0和1以外的参数。
您需要使速度=生成的随机数。 x永远不会设置为速度