下一个更精彩:gotoAndPlay与gotoAndStop的之间
在游戏制作中我们经常需要存储一些离散的对象数据,比如道具箱里的道具,经常需要执行插入和删除操作,而且道具之间没有联系是无序排列的.有些人会说直接用数组不就得了,但是有大量数据存储时的数组的删除插入操作的效率是很低的。
因此我们需要哈希表这样的可以提供快速的插入和删除,查找操作的数据结构,不论哈希表中有多少数据,插入和删除操作只需要接近常量的时间:即O(1)的时间级。
既然这么好那么我们的AS可以实现吗?当然可以!AS发展到AS2.0,已经成为在语法上更接近于Java + Pascal的面向对象的语言.如今,伴随着Flash8的发行,使得这种脚本语言添加了运行速度更加快捷,后台技术连接的更加方便等优点.因此我们完全可以用AS来实现一些常用数据结构。
首先我们先要实现有序链表,顾名思义,链表就是一种像链一样的数据结构,类似数组,但是不同的是链表每个节点一般都至少包括一个数据项和一个指向下个节点的指针,而且有序链表的数据是按顺序排列的。
建议大家把类都放到包里,这样便于以后查找和使用,这里我把这些类放在名为util的包里面.
有序链表的实现:
链表结点类:
class util.Link
{
public var iData; // data item(key)
public var dData;
public var next:util.Link; // next link in list
// ------------------------------------------------------------
public function Link(id,dd) // constructor
{
iData = id; // (’next’ is automatically
dData = dd;
} // set to null)
// ------------------------------------------------------------
public function displayLink():Void // display ourself
{
trace("{" + iData + "," +dData+ "} ");
}
} // end class Link
有序链表类:
import util.Link;//注意要导入我们前边的Link类!
class util.SortedList
{
private var first:Link; // ref to first list item
// ------------------------------------------------------------
public function SortedList() // constructor
{ first = null; }
// ------------------------------------------------------------
public function insert(theLink:Link):Void // insert link, in order
{
var key = theLink.iData;
var previous:Link = null; // start at first
var current:Link = first;
// until end of list,
while(current != null && key > current.iData)
{ // or current > key,
previous = current;
current = current.next; // go to next item
}
if(previous==null) // if beginning of list,
first = theLink; // first --> new link
else // not at beginning,
previous.next = theLink; // prev --> new link
theLink.next = current; // new link --> current
} // end insert()
public function deleteD(key):Void // delete link
{ // (assumes non-emptylist)
var previous:Link = null; // start at first
var current:Link = first;
// until end of list,
while(current != null && key != current.iData)
{ // or key == current,
previous = current;
current = current.next; // go to next link
}
// disconnect link
if(previous==null) // if beginning of list
first = first.next; // delete first link
else // not at beginning
previous.next = current.next; // delete currentlink
} // end delete()
// ------------------------------------------------------------
public function find(key):Link // find link
{
var current:Link = first; // start at first
// until end of list,
while(current != null && current.iData <= key)
{ // or key too small,
if(current.iData == key) // is this the link?
return current; // found it, return link
current = current.next; // go to next item
}
return null; // didn’t find it
} // end find()
// ------------------------------------------------------------
public function displayList():Void
{
trace("List (first-->last): ");
var current:Link = first; // start at beginning of list
while(current != null) // until end of list,
{
current.displayLink(); // print data
current = current.next; // move to next link
}
trace("");
}
} // end class SortedList


| · 你会让人一见钟情吗 |
| · 搞笑CS版少女初夜 |
| · 超级女生李宇春终结版 |
| · 智力大挑战连连看 |
| · 美眉换装小游戏合集 |
| · 无与伦比周杰伦火热MTV |
| · 其卡通小奖赛发挥你创意 |
| · 齐达内铁头VS马特拉奇 |
| · ShowGood经典爆笑三国 |
| · 小破孩动画专区 |
| 关于腾讯 | About Tencent | 服务条款 | 广告服务 | 腾讯招聘 | 腾讯公益 | 客服中心 | 网站导航 | |
| Copyright © 1998 - 2008 Tencent Inc. All Rights Reserved | ![]() |
| 腾讯公司 版权所有 | |