gpt4 book ai didi

python - 我怎样才能让我的圈子在pygame中飞出屏幕?

转载 作者:行者123 更新时间:2023-11-28 20:09:00 27 4
gpt4 key购买 nike

我是 python 的初学者,我正在尝试制作一个圆形游戏。到目前为止,当您单击时,它会在您的鼠标处绘制一个随机颜色和半径的圆圈。

接下来,我想让圆圈从屏幕上随机飞出。我该怎么做呢?到目前为止,这是我的代码的主要部分:

check1 = None
check2 = None

while True:

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

if event.type == MOUSEBUTTONDOWN:
last_mouse_pos = pygame.mouse.get_pos()



if last_mouse_pos:

global check

color1 = random.randint(0,255)
color2 = random.randint(0,255)
color3 = random.randint(0,255)
color = (color1,color2,color3)

radius = random.randint (5,40)
posx,posy = last_mouse_pos

if posx != check1 and posy != check2:
global check1, check2
screen.lock()
pygame.draw.circle(screen, color, (posx,posy), radius)
screen.unlock()
check1,check2 = posx,posy


pygame.display.update()

同样,我希望圆圈以随机方向飞离屏幕。我做了几次尝试,但还没有成功。另外感谢帮助我的jdi

最佳答案

当您创建圆(点击)时,生成 2 个随机数。这些将是二维 Euclidean 的 (x,y) 组件velocity矢量:

enter image description here

# interval -1.0 to 1.0, adjust as necessary
vx, vy = ( (random.random()*2) -1, (random.random()*2) - 1 )

然后在创建球之后,在游戏循环的每次迭代中,通过速度向量增加球的位置:

enter image description here

posx, posy = posx + vx, posy + vy

请注意,整体速度可能是可变的。如果你想始终拥有每秒 1.0 的速度,请对向量进行归一化:

收件人normalize向量,你将它除以它的 magnitude :

enter image description here

所以在你的情况下:

enter image description here

因此:

enter image description here

因此在 Python 中,在使用 import math 导入 math 之后:

mag = math.sqrt(vx*vx + vy*vy)
v_norm = vx/mag, vy/mag
# use v_norm instead of your (vx, vy) tuple

然后您可以将它与一些 speed 变量相乘,以获得可靠的速度。


一旦您进展到让多个对象四处移动并可能离开屏幕,删除屏幕外的对象就很有用了,这些对象没有机会回来,并且与您的程序不再有任何关系。否则,如果您在创建更多对象的同时继续跟踪所有这些屏幕外对象,您实际上会发生内存泄漏,并且如果有足够的时间/操作,内存就会耗尽。


虽然您现在正在做的事情非常简单,但假设您还没有这样做,学习一些基本的矢量数学将很快获得返回。最终您可能需要涉足一些矩阵数学来进行某些转换。如果您是新手,它并不像乍看起来那么难。您可能可以不研究它而逃脱,但如果您开始尝试做更有野心的事情,您以后会省力。

关于python - 我怎样才能让我的圈子在pygame中飞出屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11911625/

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