单击后 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()

我发现您的代码有两个问题。当我修复这两个问题时,我得到了一些合理的东西,我认为这些东西会让你进入一个可以继续你的开发的地方:

  1. 当我尝试 运行 您的代码时出现错误,涉及行 position = self.position,。这条线没有意义。在这里,您引用了刚开始构建的对象的 position 属性。此外,您没有使用传递给构造函数的 position 参数。要解决这两个问题,我希望您在这里想要的是 position = position 将传入的 position 简单地传递给超类的构造函数。

  2. 这一行看起来也很可疑: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()