发新帖  新投票  回帖 
4064个阅读者,26条回复 | 打印 | 订阅 | 收藏
枳橘吟

发表时间:2012-3-28 04:29

[讨论] 给 老虎的牙齿



枳橘吟 发表在 音乐播放器 华声论坛 http://bbs.voc.com.cn/forum-344-1.html

.

  F9 我不熟悉。不知对错。谨予参考。

[全屏欣赏]



package _fla{
import flash.display.*;
import flash.events.*;

dynamic public class MainTimeline extends MovieClip
{
public var bl:Number;
public var jianxiao:MovieClip;
public var zengda:MovieClip;
public var mc_mc:MovieClip;

public function MainTimeline() {
addFrameScript(0, frame1);
return;
}

public function frame1() {
mc_mc.height = 40;
bl = 5;
zengda.addEventListener(MouseEvent.MOUSE_OVER, zdhs);
jianxiao.addEventListener(MouseEvent.MOUSE_OVER, jxhs2);
return;
}

public function jxhs2(event:Event) {
mc_mc.removeEventListener(Event.ENTER_FRAME, zdhs);
if (mc_mc.height > 40) {
mc_mc.height = mc_mc.height - bl;
}else {
mc_mc.removeEventListener(Event.ENTER_FRAME, jxhs2);
}
mc_mc.addEventListener(Event.ENTER_FRAME, jxhs2);
}

public function zdhs(event:Event) {
mc_mc.removeEventListener(Event.ENTER_FRAME, jxhs2);
if (mc_mc.height < 300) {
mc_mc.height = mc_mc.height + bl;
} else {
mc_mc.removeEventListener(Event.ENTER_FRAME, zdhs);
}
mc_mc.addEventListener(Event.ENTER_FRAME, zdhs);
}
}
}

[本帖最后由 枳橘吟 于 2012-3-28 04:34 编辑]

 
老虎的牙齿

回复时间:2012-3-28 10:42
感谢枳橘吟老师,辛苦了,原来的制作需要二次滑入的问题已经解决了,谢谢。




----------------------------------------------
音乐应当使人类的精神爆出火花。音乐,是人生的快乐;音乐,是生活中的一股清泉;音乐,是陶冶人性情的熔炉。 ...
 
kellyxwj

回复时间:2012-3-28 11:38
这是那一个上面的问题 看着好面熟




----------------------------------------------
人生很短,请珍惜这一路的友情、爱情和亲情,于千万人之中遇见不易,一旦擦身,相逢便是无期!
 
老虎的牙齿

回复时间:2012-3-28 12:28
再次感谢枳橘吟老师,就是想要你改的这个效果,可能是我表达方面的问题,在天地会的求助没有解决,




----------------------------------------------
音乐应当使人类的精神爆出火花。音乐,是人生的快乐;音乐,是生活中的一股清泉;音乐,是陶冶人性情的熔炉。 ...
 
枳橘吟

回复时间:2012-3-28 14:11

原帖由 老虎的牙齿 于 2012-3-28 12:28 发表
再次感谢枳橘吟老师,就是想要你改的这个效果,可能是我表达方面的问题,在天地会的求助没有解决,

  不客气。
  我不熟悉F9。好在问题不复杂,试出来了。
  天地会的回帖(板凳)已点到了原因。那里高手多,小儿科的问题,可能懒得理会吧。
  F9太磨人,错不得一点点。虽有查错功能,但文字上太专业,看不懂。指出了问题,还要死脑细胞找问题。
  如果习惯了F9的脚本,可能比F8还“简单”,一些常见的内容,它就只能那样写,似乎特死板。象按钮脚本,就只一种写法,还要用“侦测”。
  F9的电平效果是我最想用的内容。但不勇敢,这一步至今未能跨过去。知道一点点,不能轻松、自如应用。一直在用F8。似乎也够用了。F9的最大优势,可能是适用于集体制作。F8的帮助举例,也有用外部“文本”方式的,不习惯,还是写在时间轴上感觉容易些。

  又看了一下天地会,有人回帖指教,说是解决了。可以再检验一下。

[本帖最后由 枳橘吟 于 2012-3-28 14:24 编辑]

 
老虎的牙齿

回复时间:2012-3-28 17:08
哦,天地会那里我又去看了,写在桢上的 但还是报错,
枳橘吟老师的这个效果已经完全有了,但是代码到现在我都没有理解,
现在老虎还有个请求,是不是可以再次麻烦。可以把代码写在帧上的,
给我一份源码,不然反编译了以后还是外包。因为这个是整个文件的一部分,
其他的代码都是写帧上的,有的在外面,有的在里面就修改麻烦。




----------------------------------------------
音乐应当使人类的精神爆出火花。音乐,是人生的快乐;音乐,是生活中的一股清泉;音乐,是陶冶人性情的熔炉。 ...
 
liucuanhu

回复时间:2012-3-28 21:35
枳橘吟老师真是这方面的行家,迷茫大哥如果做好了可不可以给点中介费!




----------------------------------------------
叶子的离开是风的追求,还是树的挽留不够 ...
 
枳橘吟

回复时间:2012-3-29 04:10
  遵 老虎的牙齿 嘱,于下。
  脚本写在主时间轴第一帧。
  删除属性面板,右下“文档类:”里面的路径内容。


[全屏欣赏]



stop();
var bl: Number = 5;

zengda.addEventListener(MouseEvent.MOUSE_OVER, zdhs);
jianxiao.addEventListener(MouseEvent.MOUSE_OVER, jxhs2);

function jxhs2(event: Event) {
mc_mc.removeEventListener(Event.ENTER_FRAME, zdhs);
if (mc_mc.height > 40) {
mc_mc.height = mc_mc.height - bl;
} else {
mc_mc.removeEventListener(Event.ENTER_FRAME, jxhs2);
}
mc_mc.addEventListener(Event.ENTER_FRAME, jxhs2);
}

function zdhs(event: Event) {
mc_mc.removeEventListener(Event.ENTER_FRAME, jxhs2);
if (mc_mc.height < 300) {
mc_mc.height = mc_mc.height + bl;
} else {
mc_mc.removeEventListener(Event.ENTER_FRAME, zdhs);
}
mc_mc.addEventListener(Event.ENTER_FRAME, zdhs);
}

[本帖最后由 枳橘吟 于 2012-3-29 04:17 编辑]

 
枳橘吟

回复时间:2012-3-29 04:28


stop();
var bl: Number = 5;

zengda.addEventListener(MouseEvent.MOUSE_OVER, zdhs);    //鼠标(按钮)事件,触发、执行指定事件
jianxiao.addEventListener(MouseEvent.MOUSE_OVER, jxhs2);

function jxhs2(event: Event) {                //事件   
mc_mc.removeEventListener(Event.ENTER_FRAME, zdhs);      //删除另一事件的帧触发
if (mc_mc.height > 40) {                   //判断,满足条件时执行
mc_mc.height = mc_mc.height - bl;
} else {
mc_mc.removeEventListener(Event.ENTER_FRAME, jxhs2);     //不满足条件时删除自身帧触发
}
mc_mc.addEventListener(Event.ENTER_FRAME, jxhs2);        //建立自身帧触发
}

function zdhs(event: Event) {
mc_mc.removeEventListener(Event.ENTER_FRAME, jxhs2);
if (mc_mc.height < 300) {
mc_mc.height = mc_mc.height + bl;
} else {
mc_mc.removeEventListener(Event.ENTER_FRAME, zdhs);
}
mc_mc.addEventListener(Event.ENTER_FRAME, zdhs);
}

[本帖最后由 枳橘吟 于 2012-3-29 04:35 编辑]

 
枳橘吟

回复时间:2012-3-29 09:14
  用F8制作,以作比较。
  脚本于下,写在主时间轴第一帧。


[全屏欣赏]


stop ();
var bl:Number = 5;
zengda.onRollOver = function () {           //按钮触发
mc_mc.onEnterFrame = function () {          //建立帧触发
if (mc_mc._height < 300) {              //判断条件
mc_mc._height += bl;                  //执行
}
else {
delete mc_mc.onEnterFrame;              //不满足条件时删除帧触发
}
};
};
jianxiao.onRollOver = function () {
mc_mc.onEnterFrame = function () {
if (mc_mc._height > 40) {
mc_mc._height -= bl;
}
else {
delete mc_mc.onEnterFrame;
}
};
};

[本帖最后由 枳橘吟 于 2012-3-29 12:55 编辑]

 
枳橘吟

回复时间:2012-3-29 09:24

原帖由 liucuanhu 于 2012-3-28 21:35 发表
枳橘吟老师真是这方面的行家,迷茫大哥如果做好了可不可以给点中介费!

   liucuanhu 朋友见笑。
  行家的帽子是那么好戴的?
  腹内空空,瞎玩而已。
  

 
老虎的牙齿

回复时间:2012-3-29 12:15
老虎收到,辛苦枳橘吟老师还加了注释.晚上回来慢慢理解.




----------------------------------------------
音乐应当使人类的精神爆出火花。音乐,是人生的快乐;音乐,是生活中的一股清泉;音乐,是陶冶人性情的熔炉。 ...
 
wu2011

回复时间:2012-3-29 12:59
上面的3.0代码,这样写,达到条件时无法移除侦听器,内存还在消耗!
//////////////////////////////////
ps:本不应多嘴,但如果不断消耗内存,会增加整个编程的负担,所以只好说两句,还望多多见谅啊!
参考代码,但也不一定要这样写!

var isplaying:Boolean;
buttonA.addEventListener(MouseEvent.MOUSE_OVER,overHandler);
buttonB.addEventListener(MouseEvent.MOUSE_OVER,overHandler);
function overHandler(event:MouseEvent):void {
this.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
//不管事件发送者是谁,都注册enterFrame侦听器
if (event.target.name=="buttonA") {
isplaying=true;
} else {
isplaying=false;
}
//判断事件发送者是谁而设置布尔值,布尔值用于enterFrame函数中作为判断


}
function enterFrameHandler(event:Event):void {
if (isplaying) {
if (zoomObj.height<300) {
zoomObj.height+=5;
} else {
this.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
}

} else {
if (zoomObj.height>40) {
zoomObj.height-=5;
} else {
this.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
}

}


}


 
枳橘吟

回复时间:2012-3-29 13:32
  再深究一下。
  将一楼的包类改为内载,如8楼内容。
  将包类整理一下,于下。这样,看起来就明了多了,加色的部分与8楼的就一致了。这样,有助于分辨两种形式的不同之处。


package _fla{
import flash.display.*;
import flash.events.*;

public class MainTimeline extends MovieClip {
public var bl:Number;
public var jianxiao:MovieClip;
public var zengda:MovieClip;
public var mc_mc:MovieClip;

public function MainTimeline () {

bl=5;
zengda.addEventListener (MouseEvent.MOUSE_OVER,zdhs);
jianxiao.addEventListener (MouseEvent.MOUSE_OVER,jxhs2);

function jxhs2 () {
mc_mc.removeEventListener (Event.ENTER_FRAME,zdhs);
if (mc_mc.height > 40) {
mc_mc.height-= bl;
} else {
mc_mc.removeEventListener (Event.ENTER_FRAME,jxhs2);
}
mc_mc.addEventListener (Event.ENTER_FRAME,jxhs2);
}

function zdhs () {
mc_mc.removeEventListener (Event.ENTER_FRAME,jxhs2);
if (mc_mc.height < 300) {
mc_mc.height+= bl;
} else {
mc_mc.removeEventListener (Event.ENTER_FRAME,zdhs);
}
mc_mc.addEventListener (Event.ENTER_FRAME,zdhs);
}


}
}
}

[本帖最后由 枳橘吟 于 2012-3-29 13:42 编辑]

 
枳橘吟

回复时间:2012-3-29 14:40

原帖由 wu2011 于 2012-3-29 12:59 发表
上面的3.0代码,这样写,达到条件时无法移除侦听器,内存还在消耗!
//////////////////////////////////
ps:本不应多嘴,但如果不断消耗内存,会增加整个编程的负担,所以只好说两句,还望多多见谅啊!
参考代码,但也不一定要这样写!

  感谢 wu2011 朋友多嘴。多嘴是热心人。

  问题是 老虎 提出的。我对F9不熟悉,七试八试试出来的。
  能否真正删除帧触发,我无法证实。但根据实效来看,应该是起了作用。因为老虎的原件效果需两次按钮触发才起作用,改动后,一次即可触发。至少可以看出,两种情况是有区别的。也就是说,每次按钮触发,首先执行的就是删除另一按钮的帧触发。于是两种效果就不一样了。另外,自身的帧触发,在执行完成后,也删除了。

  为学习故,用你奉献的脚本实测,不能实现效果。
  1、看明白了你的思路。
  2、只能增大或减小。也就是说布尔值不改变;
  3、将判断执行中的布尔值人为改变,可改变变化的情况。
  4、根据情况看,是不能判断按钮。但没找到原因。

  乞盼指教。感谢。

*****************************

  九死一生,查到了原因。
  按钮元件不正规(实际是剪辑),剪辑内,含有按钮实例。大概因此引发了混乱。
  将按钮元件(剪辑)内的按钮实例删除,使这个元件成为一个纯粹的、简单的剪辑,问题解决。
  一定牢记此教训:按钮元件不能复杂(无论是真正的按钮或是用剪辑实现按钮作用)。以前看到过关于“冒泡”问题,不知是不是与此有关。慢慢学习。

  此方案与F8制作中的工作过程很类似。

  感谢 wu2011 朋友,让我学到新东西。



  

[本帖最后由 枳橘吟 于 2012-3-29 17:56 编辑]

 
枳橘吟

回复时间:2012-3-29 16:57
  做了个试验。8楼的方案可以删除侦听。
  右上的计数只是累加、累减,没有限制条件。如果侦听在起作用(没有被删除),那么计数就不会停止。
  计数停止了,说明侦听失效了。


[全屏欣赏]


 
wu2011

回复时间:2012-3-30 02:29


function jxhs2(event: Event) {
mc_mc.removeEventListener(Event.ENTER_FRAME, zdhs);
if (mc_mc.height>40) {
mc_mc.height=mc_mc.height-bl;
} else {
mc_mc.removeEventListener(Event.ENTER_FRAME, jxhs2);
}
mc_mc.addEventListener(Event.ENTER_FRAME, jxhs2);
trace("放在这里测试")

}

function zdhs(event: Event) {
mc_mc.removeEventListener(Event.ENTER_FRAME, jxhs2);
if (mc_mc.height<300) {
mc_mc.height=mc_mc.height+bl;
} else {
mc_mc.removeEventListener(Event.ENTER_FRAME, zdhs);
}
mc_mc.addEventListener(Event.ENTER_FRAME, zdhs);
trace("放在这里测试")
}

//侦听器放在侦听的函数里,起了循环侦听作用,一经触发,在侦听的函数内就再无法移除这个侦听器,只能在外部移除
//这个实例使用了两个侦听器,但最少一个是无法移除的

 
wu2011

回复时间:2012-3-30 03:31
“按钮元件不正规(实际是剪辑),剪辑内,含有按钮实例。大概因此引发了混乱。
  将按钮元件(剪辑)内的按钮实例删除,使这个元件成为一个纯粹的、简单的剪辑,问题解决。
  一定牢记此教训:按钮元件不能复杂(无论是真正的按钮或是用剪辑实现按钮作用)。以前看到过关于“冒泡”问题,不知是不是与此有关。慢慢学习。”

button.addEventListener(MouseEvent.CLICK,clickHandler);
function clickHandler(event:MouseEvent):void {
trace(event.target.name)
trace(event.currentTarget.name)
//event.target指向的是发送事件源对象,假如这个button是有子级对象的,发送事件是一个子级,event.target.name就是子级的名字
//event.currentTarget指向的是当前发送事件对象,不管button有没有子级,不管发送事件的对象子级是谁,都向上冒泡,直到最外层,也就是button
}
所以使用event.target.name,假如这个button是有子级对象的话,可能就出错了
为了按钮的各种制作,我上面那代码,最好还是改用event.currentTarget.name

 
枳橘吟

回复时间:2012-3-30 07:20
  敬复17、18楼。
  为放开手脚,恃无忌惮求教、讨论,先作于下说明。
  1、万分感谢 wu2011 朋友耐心、细致教授、解惑。
    上网数年,似乎第一次遇到这样的机缘。
  2、F8相对熟悉一点,F9可以说动不了手,在帮助中查找条目也相当费劲。
    言谈中常有F8的思路、观点,请不要烦燥。
  3、生性喜欢咬死理(长沙话:蛀梗楼板)。
    本意是希望真正理解问题,真正吃透,绝无强辩、争强好胜的意思。言语中若有唐突、冒犯等,恳请海涵。

************************
  18楼的内容,让我学到新东西,明白了原因。由衷感谢。
  17楼的内容,对照再作测试。诚如朋友所言,侦测没有删除。也学到新东西。并且学到解决问题的方法,这更有价值,也是我最看重、最衷情的。
  16楼,我的试验,计数放置的位置于下。

function jxhs2 (param1:Event) {
mc_mc.removeEventListener (Event.ENTER_FRAME, zdhs);
if (mc_mc.height > 40) {
mc_mc.height = mc_mc.height - bl;
tt += 1;
T.text = tt;

} else {
mc_mc.removeEventListener (Event.ENTER_FRAME, jxhs2);
}
mc_mc.addEventListener (Event.ENTER_FRAME, jxhs2);
}

  按朋友教授,改为于下位置,问题现了原形。大喜。再次由衷感谢。

function jxhs2 (param1:Event) {
mc_mc.removeEventListener (Event.ENTER_FRAME, zdhs);
if (mc_mc.height > 40) {
mc_mc.height = mc_mc.height - bl;
} else {
mc_mc.removeEventListener (Event.ENTER_FRAME, jxhs2);
}
mc_mc.addEventListener (Event.ENTER_FRAME, jxhs2);
tt += 1;
T.text = tt;;

}

  不敢独食。将效果发出,以飨坛中诸君。
  好处见者有份,教训各自记取。

[全屏欣赏]



  学无止境。大谢 wu2011 朋友。


.

[本帖最后由 枳橘吟 于 2012-3-30 08:31 编辑]

 
枳橘吟

回复时间:2012-3-30 07:41
  此帖讨论可告一段落。
  最终制作按13楼。
  脚本用 老虎 的原件修改,其他可参考此上诸帖。
  附实效。
  本人所发各帖均为习作、试验性质,用于学习、探讨。请赏光临帖的朋友自行把握对错。乞盼讨论、赐教。感谢。


var tt = 0;
var isplaying:Boolean;
zengda.addEventListener (MouseEvent.MOUSE_OVER,overHandler);
jianxiao.addEventListener (MouseEvent.MOUSE_OVER,overHandler);

function overHandler (event:MouseEvent):void {
if (event.currentTarget.name=="zengda") {
isplaying=true;
} else {
isplaying=false;
}
//判断事件发送者是谁而设置布尔值,布尔值用于enterFrame函数中作为判断
this.addEventListener (Event.ENTER_FRAME,enterFrameHandler);
//不管事件发送者是谁,都注册enterFrame侦听器
}

function enterFrameHandler (event:Event):void {
if (isplaying) {
if (mc_mc.height<300) {
mc_mc.height+=5;
} else {
this.removeEventListener (Event.ENTER_FRAME,enterFrameHandler);
}
tt += 1;
T.text = tt;

//此计数为试验设置。实际应用可取消。
} else {
if (mc_mc.height>40) {
mc_mc.height-=5;
} else {
this.removeEventListener (Event.ENTER_FRAME,enterFrameHandler);
}
tt -= 1;
T.text = tt;

//此计数为试验设置。实际应用可取消。
}
}

[全屏欣赏]



[本帖最后由 枳橘吟 于 2012-3-30 08:20 编辑]

 
发新帖 新投票
 回帖
查看积分策略说明快速回复主题
你的用户名: 密码:   免费注册(只要30秒)


启用 Html 代码
使用个人签名
(请您文明上网理性发言!并遵守相关规定贴文发布前,请确认贴文内容完全由您个人创作或您得到了版权所有者的授权。版权声明
   



Processed in 0.028146 s, 8 q - sitemap,