Beispiel #1
0
        private void MoveToTop(GameComponent item, GameComponentCollection itemList)
        {
            int layer = itemList.IndexOf(item);
            int MaxLayer = itemList.Count - 1;
            if (layer > MaxLayer)
            {
                Console.WriteLine("错误:指定层级不存在于itemList当中!");
                return;
            }

            GameComponent srcItem = itemList[layer];
            for (int i = layer + 1; i <= itemList.Count - 1; i++)
            {
                itemList[i - 1] = itemList[i];
            }
            itemList[MaxLayer] = srcItem;

            //SetTypeList(itemList);
        }
Beispiel #2
0
        private void MoveToUpperLayer(GameComponent item, GameComponentCollection itemList)
        {
            int layer = itemList.IndexOf(item);
            int MaxLayer = itemList.Count - 1;
            if (layer == MaxLayer)
            {
                Console.WriteLine("信息:该Item已经处于顶层");
                return;
            }

            // 寻找最近一个覆盖它的Item
            GameComponent curItem = itemList[layer];

            Transform curTrans = curItem.Children.QueryComponent<Transform>();
            if ( curTrans == null)
                return;
            Rectangle curRect = curTrans.GetOrthoBox();

            GameComponent upperItem = null;
            int upLayer = -1;
            for (int i = layer + 1; i <= MaxLayer; i++)
            {
                GameComponent compItem = itemList[i];
                Transform compTrans = compItem.Children.QueryComponent<Transform>();
                if (compItem == null)
                    continue;
                Rectangle compRect = compTrans.GetOrthoBox();

                if (curRect.Intersects(compRect))
                {
                    upperItem = compItem;
                    upLayer = i;
                    break;
                }
            }

            if (upperItem == null)
            {
                Console.WriteLine("信息:该Item未被任Item覆盖");
                return;
            }

            // 移动
            MoveTo(layer, upLayer, itemList);

            //SetTypeList(itemList);
        }
Beispiel #3
0
        private void MoveToLowerLayer(GameComponent item, GameComponentCollection itemList)
        {
            int layer = itemList.IndexOf(item);
            if (layer == 0)
            {
                Console.WriteLine("信息:该Item已经处于底层");
                return;
            }

            // 寻找最近一个被覆盖的Item
            GameComponent curItem = itemList[layer];
            Transform curTrans = curItem.Children.QueryComponent<Transform>();
            if (curTrans == null)
                return;
            Rectangle curRect = curTrans.GetOrthoBox();

            GameComponent lowerItem = null;
            int lowerLayer = -1;
            for (int i = layer - 1; i >= 0; i--)
            {
                GameComponent compItem = itemList[i];
                Transform compTrans = item.Children.QueryComponent<Transform>();
                if (compItem == null)
                    continue;
                Rectangle compRect = compTrans.GetOrthoBox();

                if (curRect.Intersects(compRect))
                {
                    lowerItem = compItem;
                    lowerLayer = i;
                    break;
                }
            }

            if (lowerItem == null)
            {
                Console.WriteLine("信息:该Item未覆盖任何其他Item");
                return;
            }

            // 移动
            MoveTo(layer, lowerLayer, itemList);

            //SetTypeList(itemList);
        }