版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://andychen0208.blogbus.com/logs/45943891.html
好久没更新BLOG了.
最近在重构游戏引擎,服务端编写还是需要多考虑的,前期的很多处理方式因为时间关系存在一些问题. 所以客户端这块就分发给其他程序员同事了.
但他们在处理的时候碰到比较多的问题,解决得还不到位,有些问题拖的时间也比较久.
这里说下刚针对排行问题的处理:
问题是这样的:游戏中要实现排行,为了处理的方便,服务器端传回来排行数据是以dataTable格式存储的.现在需要在FLEX中的DataGrid中显示出来.上个周给了他们提示,需要做转换,但他们一直没转换成功,也没找到方法,更没学会跟踪和分析,郁闷啊.
废话不说了,通过跟踪与分析,发现NET传回来的DATATABLE经过FLEX处理后,字段和数据分开存放了.
分别存放在:serverInfo.columnNames和serverInfo.initialData中, 而FLEX DATAGRID的读取的数据格式,其中一种是相当于键值形式的.找到这个出口后,直接在FLEX中把数据转换成想要的数据格式就好了.
<code>
//=====================================================
// dotNet中传递回来的dataTable转换成 Flex中DataGride 能绑定的Array
// 本方法,是针对目前的排行做的处理
//
// 字段中的 "sort" 表示排序序号,由Flex端生成
//
//e.g.
// <code>
// var obj = notification.getBody();
// var data:ArrayCollection = new ArrayCollection(Common.dataTabelToArray(obj));
// mainScreen.dataShow.myGrid.dataProvider=data;
//</code>
// parames @data NET中传过来的DataTable数据
//=====================================================
public static function dataTabelToArray(data:Object):Array
{
if (data==null ) return null;
var returnArr:Array=[];
var columnsArr:Array = data.serverInfo.columnNames; //字段
var dataArr:Array = data.serverInfo.initialData; //数据
var obj:Object;
var sort:int = 0;
for each (var _rowData:Object in dataArr)
{
sort ++ ;
obj =new Object();
for (var i:* in columnsArr)
{
obj["sort"] = sort;
obj[columnsArr[i]] = _rowData[i];
}
returnArr.push(obj);
}
data = null;
columnsArr = null;
dataArr = null;
return returnArr;
}
</code>