Egret社区
本帖最后由 nodep 于 2017-4-18 21:56 编辑

只作为思路启发,只在特殊需求环境下使用修正切换bug1.固定对象远远多于移动对象的时候
2.对层级交换速度要求很高的时候
3.同时参与维护显示的对象上百个
建议用链表的结构进行层级维护,满足以上条件时用链表结构可大大减少运算量。


[C++] 纯文本查看 复制代码
/**
 * 链表排序接口,主要针对场景中需要排序的显示对象
 * @author nodep
 * @version 1.0
 */
interface ILink {
        getPre():ILink;
        setPre(target:ILink):void;
        getNext():ILink;
        setNext(target:ILink):void;
}
以及一个对接口的简单实现
[C++] 纯文本查看 复制代码
/**
 * 基础植物类
 */
class Plant extends egret.DisplayObjectContainer implements ILink, IRole {

        private _data: Object;
        private _preLink: ILink;
        private _nextLink: ILink;
        private _ak:string;

        public constructor() {
                super();
                var shape: egret.Shape = new egret.Shape();
                shape.graphics.beginFill(0x000000, 1);
                shape.graphics.drawRect(-20, -250, 40, 250);
                shape.graphics.beginFill(0x00FF00, 1);
                shape.graphics.drawRect(-70, -250, 140, 80);
                shape.graphics.endFill();
                this.addChild(shape);
        }

        public setData(data: Object): void {
                this._data = data;
        }

        public getData(): Object {
                return this._data;
        }
        public getPre(): ILink {
                return this._preLink;
        }
        public setPre(target: ILink): void {
                this._preLink = target;
        }
        public getNext(): ILink {
                return this._nextLink;
        }
        public setNext(target: ILink): void {
                this._nextLink = target;
        }
        public setAreaKey(ak:string):void{
                this._ak = ak;
        }
        public getAreaKey():string{
                return this._ak;
        }
        public removed():void{

        }
        public added():void{
        }
}


//以及移动角色自身因移动导致的层级排序
[C++] 纯文本查看 复制代码
/**检查自己的Y轴排序 */
        protected checkPosY(): void {
                while (this._preLink && this.y < this._preLink["y"]) {
                        StageLayer.self.gotoPre(this);
                }
                while (this._nextLink && this.y > this._nextLink["y"]) {
                        StageLayer.self.gotoNext(this);
                }
        }
下面是LinkArray的实现以及用法
游客,如果您要查看本帖隐藏内容请回复







如图所示

如图所示
分享到 :
2 人收藏

35 个回复

倒序浏览
ziwn_vip  渐入佳境 | 2017-4-18 14:04:13
nodep  渐入佳境 | 2017-4-18 17:15:53
已更新,因现写的熟肉,之前切换有点问题。
周佳鹏  登堂入室 | 2017-4-18 18:12:34
yung  初窥堂奥 | 2017-4-18 18:26:32
学习~~
nofastfat  圆转纯熟 | 2017-4-18 18:51:22
666
gaozhaotc  初学乍练 | 2017-4-19 10:34:58
lwlpluto  登堂入室 | 2017-5-13 15:07:17
学习1下
wssznh  登堂入室 | 2017-8-4 22:13:31
本帖最后由 wssznh 于 2017-8-4 22:22 编辑

学习一下
nodep  渐入佳境 | 2017-8-4 22:17:11
wssznh 发表于 2017-8-4 22:13
http://dmhd123.f3322.net:8009/ddz

什么鬼,打不开
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号

Powered by Discuz! X3.2 © 2001-2016 Comsenz Inc.

返回顶部