椋鸟 - 平方瓷砖地图和定位

时间:2014-06-22 03:47:58

标签: starling-framework

我正在使用Action Script 3 / Starling制作一个平铺游戏。

假设我有这样的场景:

+----+----+----+----+----+
|    |    |    |    |    | 0th row - highest
+----+----+----+----+----+
|    |    |    |    |    |
+----+----+----+----+----+
|    |    |    |    |    |
+----+----+----+----+----+
|    |    |    |    |    | 3rd row - lowest
+----+----+----+----+----+ 

在这个例子中,我有一个5x4平铺场景。 在真实的游戏中,我将拥有100x100平铺场景

此平方地图用于RPG游戏,其中每个方格可被对象或角色占据。物体可以像树一样高,可以隐藏物体。

这里的关键概念是“将对象隐藏在后面”,行号越大,它将与屏幕“最近”,如果行号为N,则从0到N-1的行将是隐藏(实际上是“重叠”)N层中的对象(例如:如果一个角色站在高度为2的位置(x = 1,y = 2),并且树站在位置(x = 1, y = 3),树将与“上方”字符完全重叠。

我想到了一个可能的选择:

如果我有当前的Starling精灵(由Starling自己创建,将其类传递给Starling构造函数),并为每一行创建一个Sprite(子精灵),将其附加到父精灵:

private var rows:Vector.<Sprite> = null;

public function createMapRows(nRows:int) {
    this.rows = new Vector.<Sprite>();
    for(var r:int = 0; r < nRows; r++) {
        this.addChild(new Sprite());
    }
}

如果角色向左或向右移动,它将保留在同一层上。如果角色向上移动,我可以将玩家从第N个创建的精灵移动到第(N-1)个创建的精灵,保持其(X,Y)坐标并执行“向上移动”动画。如果角色向下移动,我可以将玩家从第N个创建的精灵移动到第(N-1)个创建的精灵,保持其(X,Y)坐标并执行“向下移动”动画。

我相信这会奏效,但我关注一个方面:表现。

我的问题是:这是关于内存性能的最佳方法吗?或者可能是一个更好的解决方案,不涉及N + 1 *问题? (实际上,如果第一个问题有“否”的答案,我想要一个替代方案)。

(*不,这不是关于数据库记录的N + 1问题:p,但精灵数量)。

1 个答案:

答案 0 :(得分:1)

有一件事是让你拥有每一行的精灵实例,或只为该行的对象。

我会这样做:

基础Sprite对象包含所有地面图块,因为总是在其他所有地方。 最重要的是,我会使一个Sprite填充该行的所有对象。

Clouds
Row 0 objects
Row 1 objects
Row 2 objects <-- player is here at the moment
Row 3 objects
BaseLayer - ground tiles

而且,就像你之前提到的那样,如果玩家向北或向南移动,只需添加玩家Sprite,那么就是右边的Sprite。