0

我有等距平铺游戏引擎(菱形地图风格),我需要对我绘制的对象进行排序。我的对象是 1x1、2x1、4x2。我该如何根据此代码执行此操作?

for (int osaY = 0; osaY < mapSize; osaY++)
        {
            for (int osaX = 0; osaX < mapSize; osaX++)
            {
                int x = osaX * 32;
                int y = osaY * 32;

                PlaceObject(thisObject, CartToIso(new Vector2(x, y)), new Vector2(osaX, osaY));
            }
        }
4

1 回答 1

0

我如何解决排序问题:
1. 创建 IDisplay 接口并将其添加到每个处理显示的类中Draw(SpriteBatch batch)
2. 创建一个DisplayManager包含Add, Remove,Draw方法和任意数量的layers(IDisplay 对象列表)的类。就个人而言,中间层是我整理我的东西的层。所以我可以把东西放在排序的对象后面,放在排序的对象之前。
3. 在Main处理绘图的类中,调用DisplayManager's Draw函数,该函数将遍历layers(Lists) 和item,并在每个item 上IDisplay调用该函数。Draw

spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
DisplayManager.Draw(spriteBatch);
spriteBatch.End();

然后在 DisplayManager 中:

public static void Draw(SpriteBatch batch){
   for (i = 0; i < bottom.Count; i++)
   {
       bottom[i].Draw(batch);
   }
   //Gets the model from the IDisplay item, and then it's Y position, and orders
   //the sort layer(list) by that.
   sort = sort.OrderBy(o => o.getModel.Position.Y).ToList();
   for (i = 0; i < sort.Count; i++)
   {
       sort[i].Draw(batch);
   }
   for (i = 0; i < top.Count; i++)
   {
       top[i].Draw(batch);
   }
}
于 2014-02-02T12:39:02.603 回答