LGAME开发随手记——精灵的显示层级

根据设想,在程序中要实现精灵的动态层级显示变换。

 

查看精灵类的设置,在Sprite继承LObject的时候有一个参数是Layer,从Lgame的文档中看到的中文描述是:目前对象所在层。

 

我的想法很简单,根据通常对层级的理解,显示程序应该是对层级有判断,根据层级关系在active或view createUI的时候会有对应策略将不同精灵的显示异步化。

 

然而事实是残酷的,我在对layer设定了对应值后,发现根本没有起作用。查看代码发现LGameAndroid2DView中的显示分以下几步(虽然上一篇文章有提到,但是看起来比较乱,再重新根据步骤描述一遍):

 

(LGameAndroid2DView函数循环流程)

1、LGameAndroid2DView循环调用run函数,产生线程,设定对应的参数后调用screen中的runTimer;

2、 screen对旗下每个sprite进行update,其中sprite的update主要是根据时间变化更新对应Animation的当前动画图象 SpriteImage;(注:默认的sprite update函数仅仅是修改Animation中的animTime,生成图像还在后面)

3、screen对旗下的desktop中的LContainer进行update,一般情况下desktop仅仅是生成一个空的LContainer;(注:这个update和sprite的update类似,不包括生成图像的)

4、返回到LGameAndroid2DView的run函数,设定模式、生成背景后(不作修改的话不需要关注),调用screen中的createUI;

5、screen对旗下每个sprite进行createUI,获取对应的SpriteImage后生成图像;(在此之前有一个draw(g);默认是abstract的,可以根据需要使用这个函数,设定风格或者调整UI顺序,后面会提到)

6、screen对旗下的desktop中的LContainer进行createUI,获取对应的SpriteImage后生成图像;

7、返回到LGameAndroid2DView的run函数,设定FPS,调整canvas,继续循环

 

整个流程,每一个步骤都没有涉及到LObject中的Layer(= =||还是得看代码,不能根据字面上的意思进行判断)。

 

要修改Sprite的显示层级,还需要进行一定的调整。

由 于默认的绘图方式是覆盖型的,即后绘制的图像会把之前的图像进行覆盖。因此需要对sprite createUI的顺序进行调整,可以在createUI前的draw(g)中对sprite的顺序进行调整,改变sprite在sprites的前后位置。这是其中一个简单的方法,当然应该还有更 好、更通用的方法解决,目前还在研究中。

 

后话:那么LObject中的Layer到底是干什么用的呢?说实话我到现在还没搞懂,可能是我不太熟悉android的整体架构吧。查看了下代码发现:

LObject中的Layer仅仅在LContainer中出现了,以这样一种形式

private static final Comparator<Object> DEFAULT_COMPARATOR = new Comparator<Object>() {
        public int compare(Object o1, Object o2) {
            return ((LComponent) o2).getLayer() - ((LComponent) o1).getLayer();
        }
    };

 

而相对应的,setLayer函数在LMessage这类jar包中的LContainer出现:this.setLayer(100)

初步估计是用于处理碰撞或者输入、点击判断用的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值