【问题标题】:addObject() in blender with python用python在搅拌机中添加对象()
【发布时间】:2015-10-30 03:29:35
【问题描述】:

我在这里碰到了一堵小墙: 我的观点是,对于一个空的,移动,然后在现场添加一个平面,然后移动,然后添加一个平面等,然后最终会得到一个 100X100 的平原,所以我编写了脚本:

import bge

dunWidth = 100 #meters/tiles
dunHeight = 100 #meters/tiles
b = 0
a = 0
add= bge.logic.getCurrentScene().addObject

def main():
    global b, a
    cont = bge.logic.getCurrentController()
    dunMarker = cont.owner
    #Movement Calculation: (X, Y, Z)
    while b < dunWidth:
        b += 1
        add("FloorTile", "DunMarker",0)
        dunMarker.applyMovement((1,0,0), False)
        while a < dunHeight:
            add("FloorTile", "DunMarker",0)
            a += 1
            dunMarker.applyMovement((0,1,0), False)
        #dunMarker.applyMovement((0,-dunHeight,0), False)
main()

但是,令我惊讶的是,它首先添加瓦片,然后通过忽略 add() 的循环,因此结果是 0x0y 处的 1x1 瓦片和 100x100y 处的空瓦片......我做了多少事情错了吗?Aaaand,既然我们在这里,您将如何改进编码?(尝试在这里学习;))

pd,是的,Roguelike 3D 项目

【问题讨论】:

    标签: python object dynamic add blender


    【解决方案1】:

    尝试使用 worldPosition 定位 dunMarker,您可能还想使用 for 循环来获得网格而不是两条边。

    import bge
    
    dunWidth = 100 #meters/tiles
    dunHeight = 100 #meters/tiles
    a=0
    b=0
    
    add= bge.logic.getCurrentScene().addObject
    
    def main():
        global a,b
        cont = bge.logic.getCurrentController()
        dunMarker = cont.owner
        for b in range(0,dunWidth,2):
            dunMarker.worldPosition=(b,a,0)
            t=add("FloorTile", "DunMarker",0)
            for a in range(0,dunHeight,2):
                dunMarker.worldPosition = (b,a,0)
                add("FloorTile", "DunMarker",0)
    main()
    

    【讨论】:

    • 非常感谢!!!只是一个问题,为什么当我设置 1 而不是 2 时(使 100X100 米的均匀地板需要 3 分钟加载并且帧速率下降?但是如果我将增加设置为 2 没有问题?(我制作了 2x2 的瓷砖并且可以工作太好了)我想你知道为什么会发生这种情况,因为你将它设置为 2 而不是 XD
    • 默认平面是 2.0 宽,所以我将它们定位到合适的位置。 range() 中的第三个数字是步长,使用 1 的步长可以创建四倍的平面(100x100 与 50x50)。众所周知,添加大量对象很慢。两倍多的对象也意味着两倍多的顶点,并且在整个尺寸上比一个平面要慢。在 100x100 和 1.0 宽下,您放置 10,000 个具有 40,000 个顶点的对象,而 2.0 宽的 50x50 是 2,500 个具有 10,000 个顶点的对象,数据越多,速度越慢。
    猜你喜欢
    • 2017-03-24
    • 2020-01-06
    • 2016-04-22
    • 1970-01-01
    • 2020-08-10
    • 2018-04-20
    • 2020-11-22
    • 2011-08-11
    • 2013-06-25
    相关资源
    最近更新 更多