2012-11-14 113 views
0

我将用Away3D API在Flash AS3中制作基于图块的3D RPG游戏。为Flash AS3和Away3D中的对象制作自定义类

我的问题是,我真的不明白的Away3D API至今..

我希望做一个“块”级。如果我加载瓷砖地图数据,我想这样做:

viewport.addchild(tileArray[ layer ][ x ][ y ]); 

所以这将是一个循环。

到目前为止这么好,但这必须是3dObject。

用这个3dObject填充数组,我想做这样的事情。

tileArray[ layer ][ x ][ y ] = myBlocksClass.getBlock("grassCube"); 

所以getBlock functon在myBlocksClass中应该返回一个3dObject。

<edit>

那些块应该是某种块的像的Minecraft(grassCube,dirtCube,...) 所以我要加载一个块的多个实例中的地图

</edit>

我该怎么做?任何人都可以给我任何想法或参考吗?

是的我已经看过所有的可撤销的资源/ documentarys /例子,但我无论如何也无法想象它。

UPDATE:

问题是更多的代码。我知道这个理论,但是游戏开发的actionscript3对我来说几乎是新的。

如何构造“块”的类?

回答

1

大多数3D应用程序实际上都是基于图块的。例如,受欢迎的地形实现是一组高分辨率麦克风,用于近距离和低距离。这些块(以及场景中的每个对象)都按场景图组织。通常为octreeOctree terrain

Allso有frustum culling

和发动机使得只有那些部分(或全部)查看金字塔内部节点。

Here is Away3D realisation

具体案件的优化allso非常重要的,但很棘手。例如地形网格顶点顺序和块大小,针对GPU chace命中进行了优化,并且可能是GPU特定的(针对特定客户端构建的),并且同时与纹理和阴影的数量相关(如果不需要,则不想交换材质所以最好是用相同的材​​料逐块渲染块,然后交换材料)或者如果您有1000个纹理立方体,您只需要一个模型,将使用不同材质绘制1000次。这对于GPU内存来说很好,但它的10000次绘制调用却可能会严重影响你的性能。所以你可能想要将它们焊接到更大的物体上,这些物体很适合八叉树节点并具有组合纹理。但是你显然想要抛弃那些地下的,不可见的立方体。

+1

耶很好解释,但我知道所有的东西。 ^^ 我的问题是更多的代码。我只需要创建一个列表,并在类中定义网格,位置,材质等等。但我不知道我可以如何在actionscript3中做到这一点。我试着做一个2d数组来保存我的自定义类,在那里我只有一个planeGeometry。但我真的没有工作。我也不知道如何在as3中使用实例来防止你写的内存问题... – Ace