发新话题
打印

影片添加广播新消息的功能,并能存贮和恢复影片初始信息

影片添加广播新消息的功能,并能存贮和恢复影片初始信息

//给影片添加广播消息的功能,并能存贮和恢复影片初始信息,请专家提点意见.
//可用#include "MCFunction.as"导入影片
//添加影片广播消息的功能
/*
属性:    preX
         preY
         PreXscale
         PreYscale
         preRotation
         newX
         newY
         newXscale
         newYscale
         newRotation
方法:   toString()
        sendPositionXY()  //发送影片位置改变的消息
sendPositionXYScale()
sendPositionRotation()
saveInit()
resetInit()
resetListeners()
事件:   onChangeXY
        onChangeXYScale   
        onChangeRotation
*/
//----------------设置影片广播消息功能
AsBroadcaster.initialize(MovieClip.prototype);
//------------定义方法
var MCP = MovieClip.prototype;
MCP.toString = function() {
return this._name;
};
MCP.resetListeners = function() {
this._listeners = new Array();
//this.addListener(this);
};
MCP.sendPositionXY = function() {
this.broadcastMessage("onChangeXY", this);
};
MCP.sendPositionXYScale = function() {
this.broadcastMessage("onChangeXYScale", this);
};
MCP.sendPositionRotation = function() {
this.broadcastMessage("onChangeRotation", this);
};
//保存影片初始信息
MCP.saveInit = function() {
this.initX = this._x;
this.initY = this._y;
this.initXscale = this._xscale;
this.initYscale = this._yscale;
this.initRotation = this._rotation;
this.initAlpha = this._alpha;
this.initHeight = this._height;
this.initWidth = this._width;
};
//重置影片初始信息
MCP.resetInit = function() {
this._x = this.initX;
this._y = this.initY;
this._xscale = this.initXscale;
this._yscale = this.initYscale;
this._rotation = this.initRotation;
this._alpha = this.initAlpha;
this._height = this.initHeight;
this._width = this.initWidth;
};
//-------------------设置新的影片属性
//获取前一位置的x
MCP.getPreX = function() {
return this.$preX;
};
//获取前一位置的Y
MCP.getPreY = function() {
return this.$preY;
};
//获取现位置的NewX
MCP.getNewX = function() {
return this.$newX;
};
//获取现位置的NewY
MCP.getNewY = function() {
return this.$newY;
};
//设置新的位置的X
MCP.setNewX = function(x) {
this.$newX = this._x=x;
if (this.$newX != this.$preX) {
this.sendPositionXY();
}
this.$preX = x;
};
//设置新的位置的Y
MCP.setNewY = function(y) {
this.$newY = this._y=y;
if (this.newY != this.$preY) {
this.sendPositionXY();
}
this.$preY = y;
};
//-----------------------------
//设置新的放缩和旋转变量_xscale,_yscale,_rotation
//获取前一位置的_xscale
MCP.getPreXscale = function() {
return this.$preXscale;
};
//获取前一位置的_yscale
MCP.getPreYscale = function() {
return this.$preYscale;
};
//获取前一位置的_rotation
MCP.getPreRotation = function() {
return this.$preRotation;
};
//获取现位置的newXscale
MCP.getNewXscale = function() {
return this.$newXscale;
};
//获取现位置的newYscale
MCP.getNewYscale = function() {
return this.$newYscale;
};
//获取现位置的newRotation
MCP.getNewRotation = function() {
return this.$newRotation;
};
//设置新的位置的newXscale
MCP.setNewXscale = function(xscale) {
this.$newXscale = this._xscale=xscale;
if (this.$newXscale != this.$preXscale) {
this.sendPositionXYScale();
}
this.$preXscale = xscale;
};
//设置新的位置的newYscale
MCP.setNewYscale = function(yscale) {
this.$newYscale = this._yscale=yscale;
if (this.newYscale != this.$preYscale) {
this.sendPositionXYScale();
}
this.$preYscale = yscale;
};
//设置新的位置的newRotation
MCP.setNewRotation = function(rot) {
this.$newRotation = this._rotation=rot;
if (this.$newRotation != this.$preRotation) {
this.sendPositionRotation();
}
this.$preRotation = rot;
};
//------------------
with (MCP) {
addProperty("preX", getPreX, null);
addProperty("preY", getPreY, null);
addProperty("preRotation", getPreRotation, null);
addProperty("preXscale", getPreXscale, null);
addProperty("preYscale", getPreYscale, null);
addProperty("newX", getNewX, setNewX);
addProperty("newY", getNewY, setNewY);
addProperty("newXscale", getNewXscale, setNewXscale);
addProperty("newYscale", getNewYscale, setNewYscale);
addProperty("newRotation", getNewRotation, setNewRotation);
}
ASSetPropFlags(MCP, null, 1);
delete MCP;
trace(">>MCFunction loaded!");
:em02:

TOP

影片添加广播新消息的功能,并能存贮和恢复影片初始信息

Re:影片添加广播新消息的功能,并能存贮和恢复影片初始信息
//添加文本的新广播消息功能
//当文本内容改变时,广播文本内容,保存初始内容和前一内容.以便恢复
//可用#include "TextField.as"导入影片
//添加文本广播消息
/*
属性: preText
textN
方法: sendText()
*/
var TP=TextField.prototype;
TP.sendText = function(mytext) {
this.broadcastMessage("onChangeText", this,mytext);
};
//获取前文本内容
TP.getPreText = function() {
return this.$preText;
};
//获取文本内容
TP.getTextN = function() {
return this.$textN;
};
//设置新的文本内容
TP.setTextN = function(myText) {
this.$textN = this.text=myText;
if (this.textN != this.$preText) {
this.sendText(this.text);
}
this.$preText=myText;
};
//添加新的文本属性_preText
with (TP) {
addProperty("preText", getPreText, null);
addProperty("textN", getTextN, setTextN);
}
ASSetPropFlags (TP, null, 1);
delete TP;
trace(">>TextField loaded!");

TOP

影片添加广播新消息的功能,并能存贮和恢复影片初始信息

Re:影片添加广播新消息的功能,并能存贮和恢复影片初始信息
//这个帧子是应用以上两个MC和TEXT扩展功能的一个实例,请高手指教
//将前两个帖子中脚本include或粘贴到影片主场景首帧内
//新建一行,在场景中新设三个MC和一个text,分别命名为:yuan,fang,zhuan,txt;
//将yuan设为可拖动,并在拖动时传递自身信息给fang和txt;txt接受信息后并传递信息给zhuan;
//在首帧内写下如下代码
yuan.onPress = function() {
this.startDrag(true);
this.onEnterFrame = function() {
this.newX = this._x;
};
};
yuan.onRelease = function() {
this.stopDrag();
delete this.onEnterFrame;
};
yuan.addListener(fang);
yuan.addListener(txt);
txt.addListener(zhuan);
fang._x = yuan._x;
fang.onChangeXY = function(sourse) {
this._x = sourse._x;
};
txt.onChangeXY = function(sourse) {
this.textN = sourse._x;
};
zhuan._rotation = yuan._x;
zhuan.onChangeText = function(sourse) {
this._rotation = sourse.text;
};
//新扩展功能,有效地传递影片信息给聆听对象,但不干扰对象的行为,对象根据需要定义自身行为就可以了.
//运用新扩展功能,可以很方便地保存影片初始信息,可供随时恢复初始状态.如影片的坐标,缩放,透明等.
附件: 您所在的用户组无法下载或查看附件

TOP

影片添加广播新消息的功能,并能存贮和恢复影片初始信息

Re:影片添加广播新消息的功能,并能存贮和恢复影片初始信息
在上面动画中,用传递消息的方式来控制聆听对象MC的行为在效率上也同样较高,当影片不动,即坐标不发生变化时,即使点击也不会发出消息,这样提高了运行效率.
这样做当然不是必须的,完全可以在点击"yuan"MC时,就设置"fang"MC的属性及"txt"的内容.
但这完全是两种不同的理念.
当我们要做一个提示栏来提示动画使用者时,新的方法就有更多的好处.可以设置所有的对象在触发时,发布自身消息,由同一个文本框来接受信息,产生一个高效的处理方法.
后面我会提供这样一个样例.
[br][br][color=#990000][b]-=-=-=-=- 以下内容由 [i]dfpxj[/i] 在 [i]2006年04月06日 07:54am[/i] 时添加 -=-=-=-=-[/b][/color]

TOP

发新话题