追踪效果实现方法1
作者:未知 来源:转载 发布时间:2005-8-18 21:02:14 发布人:acx
Chaser 类:
Chaser类实现了简单的追踪效果,使用这个类,用户可以大大简化各种追踪效果的实现。 Chaser的实例具有追踪其他mc的功能,可以追踪的属性如下:
点击浏览该文件
此方法不同于Target类,它将功能实现写在chaser上面,使他可以追踪任何一个mc(也可以是其他对象,但主要是针对mc作的这个dd^^)。
Target类则是将功能实现在‘目标’上,使它可以被任何1个对象所追踪。
Chaser类实现了简单的追踪效果,使用这个类,用户可以大大简化各种追踪效果的实现。 Chaser的实例具有追踪其他mc的功能,可以追踪的属性如下:
_x
_y
_xscale
_yscale
_width
_height
_rotation
_alpha
使用方法:将一个mc连接到xp.gameLib.chase.Chaser类或其子类,并设置onChase事件处理函数,用户在onChase函数中实现追踪的具体实现。_y
_xscale
_yscale
_width
_height
_rotation
_alpha
实现效果演示:
点击浏览该文件
源文件:
点击浏览该文件
此方法不同于Target类,它将功能实现写在chaser上面,使他可以追踪任何一个mc(也可以是其他对象,但主要是针对mc作的这个dd^^)。
Target类则是将功能实现在‘目标’上,使它可以被任何1个对象所追踪。
Top Features:
l 速度比较快,如果要更快,可以删除一些不必要得追踪属性
l 易扩展,继承Chaser类后可以在calculateChase方法中添加需要的追踪属性。
l 通用性。
l 性价比高。。功能要求中等的场合。譬如追踪导弹,有趣的拖动条等。
disAdv:
l 追踪者必须是Chaser类或其子类,制约了其他的功能实现。
l 只能追踪特定的属性,不能对不同的对象选择不同的追踪属性,追踪的功能难以细分(下个dd解决这个问题,恩)
l 其他的还在想。。。
类实现:
类实现:
/**
* @author xp@drmingdrmer
* Chaser implements chasing.<br>
* By making an MC to be a Chaser instance. <br>
* Chaser的实例具有追踪其他mc的功能,可以追踪的属性如下:
* <code>
* _x
* _y
* _xscale
* _yscale
* _width
* _height
* _rotation
* _alpha
* <code>
* 使用方法:将一个mc连接到xp.gameLib.chase.Chaser类或其子类,并设置onChase事件处理函数,用户在onChase函数中实现追踪的具体实现。<br>
* Chaser类仅提供了简单的即时追踪效果.<br>
* 不支持指定步长的追踪,或几何速率的追踪。用户可以在子类中扩展并实现这些功能。
*/
class xp.gameLib.chase.Chaser extends xp.system.MovieClipAdv{
/**
* 触发器
*/
static var impulser:Object;
/**
* default properties list in which the property will be chase.<br>
* 默认的属性列表。
*/
static var defaultPropList:Object={
_x:1,
_y:1,
_xscale:1,
_yscale:1,
_width:1,
_height:1,
_rotation:1,
_alpha:1
};
/**
* properties list,use ’addProperty’,’delProperty’ to add or remove properties from chasing。
* @see addProperty
* @see delProperty
* 属性列表,设置那些属性可以被追踪到。当Chaser实例被实例化后,就具有了默认的属性列表。
*/
var propList:Object;
/**
* mc list to which this Chaser chases.
* mc列表,记录那些mc被这个Chaser实例追踪了
*/
private var mlist:Array;
/**
* total weight value.
* 总的权重。
*/
var totalWeight:Number;
/**
* constructor<br>
* 监听impulser的callChase事件,初始化成员变量。
*/
public function Chaser() {
//for sub class create a ’constructor’ property.
//function implemented in MovieClipAdv.
this["createConstructor"](arguments);
if (impulser==undefined){
impulser=createImpulser();
}
impulser.addListener(this);
propList=new Object();
for (var i in defaultPropList){
propList[i]=defaultPropList[i];
}
mlist=new Array();
totalWeight=0;
}
/**
* overWritten
* create a impulser.
* @return impulser implemented ’xp.events.Broadcaster’ interface.
* 生成一个触发器,定时调用callChase函数,默认生成的impulser每帧调用1次callChase,子类可以覆盖此函数。
*/
function createImpulser():Object{
return xp.system.Broadcaster.createAutoBroadcaster("callChase",2);
}
/**
* add a property to chase<br>
* @param n String property name
* 添加一个被追踪的属性
*/
function addProp(n:String){
propList[n]=1;
}
/**
* delete a property to chase<br>
* @param n String property name
* 删除一个被追踪的属性
*/
function delProp(n:String){
delete propList[n];
}
/**
* add another target to chase,optionally specifying a weight value for calculating chasing result.<br>
* @param m MovieClip instance to chase.
* @param w weight.
* 添加一个被追踪的目标。
*/
function addTarget(m:MovieClip,w:Number){
if (!m) return;
if (w==undefined || isNaN(w)) w=1;
//push instance to queue,& remember its position.
m.__chaser__id__=mlist.push({w:w,ins:m})-1;
totalWeight+=w;
}
/**
* delete a target.
* @param p could be MC reference or id.
* @return Boolean
* 删除一个被追踪的目标
*/
function delTarget(p):Boolean{
var id:Number=undefined;
if (!isNaN(p)) id=Number(p);
else id=p["__chaser__id__"];
if (id==undefined) return false;
mlist.split(id);
for (var i : Number = id; i < mlist.length; i++) {
mlist[i]["__chaser__id__"]=i;
}
return true;
}
/**
* invoked by impulser<br>
* broadcast ’onChase’ event
* 由impulser定时触发,计算追踪数值并调用用户定义的onChase函数。
*/
function callChase(){
var eo=calculateChase();
//subclass implement onChase by get/set function !!
this.onChase(eo);
}
/**
* abstract function<br>
* overWritten by user defined function.
* 由用户覆盖此函数。
* @param eo 属性集合,包含所有propList中列出的属性。
*/
function onChase(eo){
}
/**
* overWritten
*
* 计算追踪的数据,子类应该覆盖此函数以实现更多的追踪效果(例如colorTransfrom,或瞄准目标的角度和距离等)<br>
* 计算追踪目标的加权平均值,保存到eo对象中并返回此对象。
* @return Object containing infomation of targets.this object will be used as ’eo’ parameter for ’onChase’ function.
*
*/
function calculateChase():Object{
var eo:Object=new Object();
var tx=0;
var ty=0;
for (var i : String in propList) {
eo[i]=0;
}
for (var j : Number = 0; j < mlist.length; j++) {
for (var i : String in propList) {
eo[i]+=mlist[j].ins[i]*mlist[j].w;
}
}
for (var i : String in propList) {
eo[i]/=totalWeight;
}
//for compatibility to Target
eo.ins=eo;
eo.geo=eo;
eo.stp=eo;
return eo;
}
}
* @author xp@drmingdrmer
* Chaser implements chasing.<br>
* By making an MC to be a Chaser instance. <br>
* Chaser的实例具有追踪其他mc的功能,可以追踪的属性如下:
* <code>
* _x
* _y
* _xscale
* _yscale
* _width
* _height
* _rotation
* _alpha
* <code>
* 使用方法:将一个mc连接到xp.gameLib.chase.Chaser类或其子类,并设置onChase事件处理函数,用户在onChase函数中实现追踪的具体实现。<br>
* Chaser类仅提供了简单的即时追踪效果.<br>
* 不支持指定步长的追踪,或几何速率的追踪。用户可以在子类中扩展并实现这些功能。
*/
class xp.gameLib.chase.Chaser extends xp.system.MovieClipAdv{
/**
* 触发器
*/
static var impulser:Object;
/**
* default properties list in which the property will be chase.<br>
* 默认的属性列表。
*/
static var defaultPropList:Object={
_x:1,
_y:1,
_xscale:1,
_yscale:1,
_width:1,
_height:1,
_rotation:1,
_alpha:1
};
/**
* properties list,use ’addProperty’,’delProperty’ to add or remove properties from chasing。
* @see addProperty
* @see delProperty
* 属性列表,设置那些属性可以被追踪到。当Chaser实例被实例化后,就具有了默认的属性列表。
*/
var propList:Object;
/**
* mc list to which this Chaser chases.
* mc列表,记录那些mc被这个Chaser实例追踪了
*/
private var mlist:Array;
/**
* total weight value.
* 总的权重。
*/
var totalWeight:Number;
/**
* constructor<br>
* 监听impulser的callChase事件,初始化成员变量。
*/
public function Chaser() {
//for sub class create a ’constructor’ property.
//function implemented in MovieClipAdv.
this["createConstructor"](arguments);
if (impulser==undefined){
impulser=createImpulser();
}
impulser.addListener(this);
propList=new Object();
for (var i in defaultPropList){
propList[i]=defaultPropList[i];
}
mlist=new Array();
totalWeight=0;
}
/**
* overWritten
* create a impulser.
* @return impulser implemented ’xp.events.Broadcaster’ interface.
* 生成一个触发器,定时调用callChase函数,默认生成的impulser每帧调用1次callChase,子类可以覆盖此函数。
*/
function createImpulser():Object{
return xp.system.Broadcaster.createAutoBroadcaster("callChase",2);
}
/**
* add a property to chase<br>
* @param n String property name
* 添加一个被追踪的属性
*/
function addProp(n:String){
propList[n]=1;
}
/**
* delete a property to chase<br>
* @param n String property name
* 删除一个被追踪的属性
*/
function delProp(n:String){
delete propList[n];
}
/**
* add another target to chase,optionally specifying a weight value for calculating chasing result.<br>
* @param m MovieClip instance to chase.
* @param w weight.
* 添加一个被追踪的目标。
*/
function addTarget(m:MovieClip,w:Number){
if (!m) return;
if (w==undefined || isNaN(w)) w=1;
//push instance to queue,& remember its position.
m.__chaser__id__=mlist.push({w:w,ins:m})-1;
totalWeight+=w;
}
/**
* delete a target.
* @param p could be MC reference or id.
* @return Boolean
* 删除一个被追踪的目标
*/
function delTarget(p):Boolean{
var id:Number=undefined;
if (!isNaN(p)) id=Number(p);
else id=p["__chaser__id__"];
if (id==undefined) return false;
mlist.split(id);
for (var i : Number = id; i < mlist.length; i++) {
mlist[i]["__chaser__id__"]=i;
}
return true;
}
/**
* invoked by impulser<br>
* broadcast ’onChase’ event
* 由impulser定时触发,计算追踪数值并调用用户定义的onChase函数。
*/
function callChase(){
var eo=calculateChase();
//subclass implement onChase by get/set function !!
this.onChase(eo);
}
/**
* abstract function<br>
* overWritten by user defined function.
* 由用户覆盖此函数。
* @param eo 属性集合,包含所有propList中列出的属性。
*/
function onChase(eo){
}
/**
* overWritten
*
* 计算追踪的数据,子类应该覆盖此函数以实现更多的追踪效果(例如colorTransfrom,或瞄准目标的角度和距离等)<br>
* 计算追踪目标的加权平均值,保存到eo对象中并返回此对象。
* @return Object containing infomation of targets.this object will be used as ’eo’ parameter for ’onChase’ function.
*
*/
function calculateChase():Object{
var eo:Object=new Object();
var tx=0;
var ty=0;
for (var i : String in propList) {
eo[i]=0;
}
for (var j : Number = 0; j < mlist.length; j++) {
for (var i : String in propList) {
eo[i]+=mlist[j].ins[i]*mlist[j].w;
}
}
for (var i : String in propList) {
eo[i]/=totalWeight;
}
//for compatibility to Target
eo.ins=eo;
eo.geo=eo;
eo.stp=eo;
return eo;
}
}
上一篇:仨个小球一动画
下一篇:飞机游戏(彩京类型《飞天站记》)