我试图使一个程序,射击一个弹丸时,鼠标左键点击。我希望它有一个实体产卵,在鼠标被点击时的方向点,并在它所指的方向移动。
我试着使用Entity.position += Entity.forward的方式,我在网上读到了一些文章。我的代码:
from ursina import *
app = Ursina()
def update():
if held_keys['left mouse']:
projectile = Entity(model = 'cube', texture = 'white_cube', color = color.white, scale = 0.5)
projectile.look_at_2d(mouse.position)
projectile.position += projectile.forward
app.run()
字符串
它会产生立方体并转动它,但它根本没有移动。我试着使用一个while循环,像这样:
from ursina import *
app = Ursina()
def update():
if held_keys['left mouse']:
projectile = Entity(model = 'cube', texture = 'white_cube', color = color.white, scale = 0.5)
projectile.look_at_2d(mouse.position)
While True:
projectile.position += projectile.forward
app.run()
型
这只会把Windows撞碎。我不知道这里出了什么问题。
1条答案
按热度按时间r7s23pms1#
因为
update
每帧都会被调用,所以每帧都要生成一个新的抛射体,调用look_at_2d并将其向前移动。下一帧你做一个新的,并向前移动一次。这将使它看起来像是不移动,但实际上你每秒产生60个实体。也许你想要的是在开始时制作一个,然后在更新时移动它?要做到这一点,只需在update函数外部示例化Entity,并在update内部执行particle.look_at()和.position += particle.forward。
不过,还有一个问题我可以发现。使用look_at_2d,你试图查看mouse.position,但是mouse.position在UI空间中,而实体在3d空间中(作为场景的父对象)。我不知道你到底想要什么,但是你可以将实体作为camera.ui的父对象,这样它们就在同一个空间中,或者你可以通过www.example.com _point获取世界空间位置mouse.world,然后查看它。为此,你需要做一个类似地面的东西,并在上面添加一个对撞机,这样鼠标就可以计算出它在3d空间中的相交位置。