单击后 Ursina 引擎立方体未出现在立方体下方
Ursina Engine Cube is not appearing under cube upon clicking
所以我有我的代码,我想在我将单击的多维数据集下显示一个多维数据集。然后我想检查这个立方体周围是否有立方体,如果在某个地方没有立方体然后创建一个但我不能这样做。有人可以帮助我吗?
from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
app = Ursina(borderless = False)
player = FirstPersonController(model='none', position=(0,5,0), scale=2)
Sky()
overworld_ground = Entity(
model = 'cube',
scale = (32,2,18),
position = (0,0,0),
collider = 'mesh',
color = color.rgb(0, 128, 0),
texture = 'grass'
)
class Voxel(Button):
def __init__(self, position = (0,0,0)):
super().__init__(
parent = scene,
position = self.position,
model = 'cube',
collider = 'box',
rotation = (0,0,0),
color = color.rgb(0, random.uniform(162,182), 0),
scale = (2, 2, 2))
def input(self, key):
if self.hovered:
if key == 'left mouse down':
voxel = Voxel(self.position.y - 2)
destroy(self)
for z in range(8):
for x in range(8):
voxel = Voxel(position = (x * 2 - 11,-1,z * 2 + 10))
app.run()
我发现您的代码有两个问题。当我修复这两个问题时,我得到了一些合理的东西,我认为这些东西会让你进入一个可以继续你的开发的地方:
当我尝试 运行 您的代码时出现错误,涉及行 position = self.position,
。这条线没有意义。在这里,您引用了刚开始构建的对象的 position
属性。此外,您没有使用传递给构造函数的 position
参数。要解决这两个问题,我希望您在这里想要的是 position = position
将传入的 position
简单地传递给超类的构造函数。
这一行看起来也很可疑:voxel = Voxel(self.position.y - 2)
。您只获取对象位置的 y
分量并将其传递给需要 3-d 位置的 Voxel
构造函数。
我解决了这两个问题,并研究了创建新体素的位置,以便我可以看到它们。一旦我这样做了,点击一个现有的体素就会导致一个新的体素出现而那个消失,这看起来就像你想看到的那样。
所以这是我的代码的修正版本,它的行为更正确:
from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
app = Ursina(borderless = False)
player = FirstPersonController(model='none', position=(0,5,0), scale=2)
Sky()
overworld_ground = Entity(
model = 'cube',
scale = (32,2,18),
position = (0,0,0),
collider = 'mesh',
color = color.rgb(0, 128, 0),
texture = 'grass'
)
class Voxel(Button):
def __init__(self, position = (0,0,0)):
super().__init__(
parent = scene,
position = position, # <- was self.position
model = 'cube',
collider = 'box',
rotation = (0,0,0),
color = color.rgb(0, random.uniform(162,182), 0),
scale = (2, 2, 2))
def input(self, key):
if self.hovered:
if key == 'left mouse down':
p = self.position
p.z += 20
voxel = Voxel(position=p)
destroy(self)
for z in range(8):
for x in range(8):
voxel = Voxel(position = (x * 2 - 11,-1,z * 2 + 10))
app.run()
所以我有我的代码,我想在我将单击的多维数据集下显示一个多维数据集。然后我想检查这个立方体周围是否有立方体,如果在某个地方没有立方体然后创建一个但我不能这样做。有人可以帮助我吗?
from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
app = Ursina(borderless = False)
player = FirstPersonController(model='none', position=(0,5,0), scale=2)
Sky()
overworld_ground = Entity(
model = 'cube',
scale = (32,2,18),
position = (0,0,0),
collider = 'mesh',
color = color.rgb(0, 128, 0),
texture = 'grass'
)
class Voxel(Button):
def __init__(self, position = (0,0,0)):
super().__init__(
parent = scene,
position = self.position,
model = 'cube',
collider = 'box',
rotation = (0,0,0),
color = color.rgb(0, random.uniform(162,182), 0),
scale = (2, 2, 2))
def input(self, key):
if self.hovered:
if key == 'left mouse down':
voxel = Voxel(self.position.y - 2)
destroy(self)
for z in range(8):
for x in range(8):
voxel = Voxel(position = (x * 2 - 11,-1,z * 2 + 10))
app.run()
我发现您的代码有两个问题。当我修复这两个问题时,我得到了一些合理的东西,我认为这些东西会让你进入一个可以继续你的开发的地方:
当我尝试 运行 您的代码时出现错误,涉及行
position = self.position,
。这条线没有意义。在这里,您引用了刚开始构建的对象的position
属性。此外,您没有使用传递给构造函数的position
参数。要解决这两个问题,我希望您在这里想要的是position = position
将传入的position
简单地传递给超类的构造函数。这一行看起来也很可疑:
voxel = Voxel(self.position.y - 2)
。您只获取对象位置的y
分量并将其传递给需要 3-d 位置的Voxel
构造函数。
我解决了这两个问题,并研究了创建新体素的位置,以便我可以看到它们。一旦我这样做了,点击一个现有的体素就会导致一个新的体素出现而那个消失,这看起来就像你想看到的那样。
所以这是我的代码的修正版本,它的行为更正确:
from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
app = Ursina(borderless = False)
player = FirstPersonController(model='none', position=(0,5,0), scale=2)
Sky()
overworld_ground = Entity(
model = 'cube',
scale = (32,2,18),
position = (0,0,0),
collider = 'mesh',
color = color.rgb(0, 128, 0),
texture = 'grass'
)
class Voxel(Button):
def __init__(self, position = (0,0,0)):
super().__init__(
parent = scene,
position = position, # <- was self.position
model = 'cube',
collider = 'box',
rotation = (0,0,0),
color = color.rgb(0, random.uniform(162,182), 0),
scale = (2, 2, 2))
def input(self, key):
if self.hovered:
if key == 'left mouse down':
p = self.position
p.z += 20
voxel = Voxel(position=p)
destroy(self)
for z in range(8):
for x in range(8):
voxel = Voxel(position = (x * 2 - 11,-1,z * 2 + 10))
app.run()