[转]关于全排在景深排序中的应用

本文探讨了AS3中多格物品的排序问题,特别是对于大于1x2格的物品,提出了全排与单排两种解决方案,并介绍了如何利用AS3自带的sort方法进行高效排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[url]http://uh.9ria.com/space-12147-do-blog-id-4006.html[/url]

这点主要体现在多格物品的排序上。就我所知道的是,大于1x2格子的物品只采用单排的方式实现是不可能的,因为排序涉及到的两个物品的同样可能有顺序问题。这种情况要不就是将物品打散成1x2,要不就只能全部排序。

其实全排并不是什么可怕的事情,很多客户端游戏都是用的全排的方法。

关于排序方法,AS3自带的sort是原生的排序方法(看时间复杂度应该至少是快速排序法),在速度上有很大的优势,使用下面的代码就能让container容器下的对象完成按sortFunction的结果来进行排序(sortObjs数组应该保持着container容器下的所有子对象)
var result:Array = sortObjs.sort(sortFunction,Array.NUMERIC|Array.RETURNINDEXEDARRAY);
for (i = 0; i < result.length; i++)
{
var v:DisplayObject = sortObjs[result[i]] as DisplayObject;
if (container.getChildIndex(v) != i)
container.setChildIndex(v,i);
}
function sortFunction(v1:*,v2:*):int
{
return v1.y < v2.y ? 1 : v1.y > v2.y ? -1 : 0;
}
在数据量一般的情况下(100左右)消耗非常轻微,反而是setChildIndex操作比较耗时(因为会导致画面重绘),也就是说在不需要更改顺序的时候即使在ENTERFRAME里重复执行CPU占用也可以接受。

然后管理好排序列表,在屏幕外的物品就不排序,基本上全排倒也是可行的。毕竟同屏幕显示的物品很多的话,本身不排序性能也已经比较吃力了。


当然,能单排还是应该单排。其实全排处理的是无法直接用排序分值来进行排序的情况(也就是必须用sortFunction才能判断前后的情况),如果可以根据物品的属性直接计算出深度,那当然还是应该单排。而且最好把计算分值的操作独立出来,排序的时候直接用结果,这样可以避免重复计算分值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值