查看完整版本: flash灵异事件

zero斌斌 2008-6-17 21:38

flash灵异事件

工作了没时间上来玩了,发现一些灵异现象,多数是关于时间轴的,给大家帮忙看看吧.

[color=blue]1.奇怪的不能跳帧事件[/color]
这个好像是flash cs3的bug,我在公司用正版测试出现同样的问题,如果adobe出过补丁了就当我火星人略过吧...
1.新建一fla,as2或as3无所谓
2.导入两张图片分别放在主场景的第一帧和第二帧里
3.在第一帧上写[code]gotoAndStop(2)[/code],导出,就出问题了:动画并没跳过去!
4.把其中一幅图片删掉或换成纯色的矩形就没事了!

[color=blue]2.动画第一帧不执行[/color]
这个勉强解决了,貌似是因为我用2.0的思维去做3.0造成的
1.新建一fla,as3
2.建个元件叫A,链接类名A,建三个关键帧,画不画东西无所谓,第1帧上写[code]trace(1)[/code]  ,第2帧上写[code]trace(2)[/code]  ,第3帧上写[code]trace(3);stop();[/code] 3.建个按钮元件,放到主场景上,加上点击事件,实现一按按钮就把A加载到主场景中的效果:
[code]  btn.addEventListener(MouseEvent.CLICK,addA);
  function addA(event:Event){
   this.addChild(new A());
  }[/code]
4.导出测试,点击按钮,和想像中的一样,trace出1 2 3来,一切正常
5.建个元件叫A_Container(就是A的容器的意思,英语比我好的略过),链接类名A_Container,把A拖到里面
6.把上面的
  [code]this.addChild(new A());[/code]
   改成:
[code] this.addChild(new A_Container());[/code]
7.导出测试,点击按钮,出问题了,只trace出2 3来,少了1
8.把代码改成不是一点击按钮就马上加载而是延迟一帧加载的:
[code]  btn.addEventListener(MouseEvent.CLICK,addADelay);
  function addADelay(event:Event){
   stage.addEventListener(Event.ENTER_FRAME,addA);
  }
  function addA(event:Event){
   this.addChild(new A_Container());
   stage.removeEventListener(Event.ENTER_FRAME,addA);
  }[/code]
9.导出测试,点击按钮,trace出1 2 3来,一切正常
结果就是我以后都不敢一点击按钮就马上干什么事情了,都是延迟一帧干...

[color=blue]3.跨帧问题[/color]
这个我一直想不明白是什么原因造成的,只能说在编程时尽量避免...

1.新建一fla,as3
2.建两个元件,叫Sp1,Sp2,链接类名和名字一样
3.建两个类,就是上面那俩家伙,构造里只要trace能区分出两者的东西就可以
  
  [code]package{
   import flash.display.Sprite;
   public class Sp1 extends Sprite{
    public function Sp1(){
     trace("Sp1初始化");
    }
   }
  }[/code]  [code]package{
   import flash.display.Sprite;
   public class Sp2 extends Sprite{
    public function Sp2(){
     trace("Sp2初始化");
    }
   }
  }[/code] 4.新建一元件叫mc,建三个关键帧,第1帧写[code]gotoAndStop(3)[/code]第2帧放个Sp1,第3帧放个Sp2 把mc拖到主场景里
5.导出测试,和想像中的一样,trace出"Sp2初始化"来,一切正常
6.新建一个元件叫"来捣乱的",mc里原来的层上面新建一个图层,拖个"来捣乱的"进去,随便起个实例名
7.导出测试,傻眼了,trace出"Sp1初始化","Sp2初始化"来
8.把"来捣乱的"的实例名去掉,就正常了
9.双击"来捣乱的",在帧上随便写个能让外界直接访问到它的办法,例如:[code](root as MovieClip).xxx=this;[/code]就又出现7的情况了
10.初步得出结论:只要不给放上去的"来捣乱的"起名字,或者是任何可以用[code]getChildAt()[/code]之外的办法访问到这个"来捣乱的"的就没事
11.把起了实例名的"来捣乱的"移到最底层,也没事
这个在做简单的游戏还好避免,稍微复杂些的东西就经常因为这个莫名其妙的出一些问题

[color=blue]4.构造中把自己从显示列表中移除引起的问题[/color]
这个也比较奇怪,好在我不常这样写

1.新建一fla,as3
2.直接拷上面建好的Sp1和Sp2来用就成了,连类文件一起拷
3.在主场景上建两层,第一层放个Sp1,第二层放个Sp2
4.导出测试,和想像中的一样,trace出"Sp1初始化","Sp2初始化"来,一切正常
5.在Sp2的构造里加个[code]this.parent.removeChild(this);[/code]也就是说变成了这样:
[code]  package{
   import flash.display.Sprite;
   public class Sp2 extends Sprite{
    public function Sp2(){
     trace("Sp2初始化");
     this.parent.removeChild(this);
    }
   }
  }[/code]
6.导出测试,再次傻眼了,只trace出"Sp2初始化"来,也就是Sp1没有正常初始化

源文件在附件里,大家一起研究哦~
ps:北京的妞好难泡啊,8月份回老家泡去

终极讨厌 2008-6-17 21:47

好长啊,哈哈

最后一句,我看清楚了
ps:北京的妞好难泡啊,8月份回老家泡去:lol

china-cell 2008-6-18 08:30

这个好像不对吧:
btn.addEventListener(MouseEvent.CLICK,addA);
  function addA(event:Event){
   this.addChild(new A());
  }

应该是:function addA(event:MouseEvent) {

zero斌斌 2008-6-18 09:07

这个...主要是下面有个 stage.addEventListener(Event.ENTER_FRAME,addA);
嘿嘿,是想改动尽量的小,MouseEvent继承的Event,所以没事

kingofkofs 2008-6-18 22:53

跟我这个现象有少许相像
[url]http://space.flash8.net/bbs/thread-354321-1-1.html[/url]
就是不能在第一帧写GOTOANDPLAY:b45

beijing1995xz 2008-6-28 17:18

厉害!

我们的心 2008-6-29 00:45

是有点怪。

ybzjllj 2008-6-29 20:42

我落伍了,好久没研究这些啰.

xuyali1986 2008-8-6 10:47

一个一个的都是高手.郁闷

jubupx2006 2008-8-6 14:01

说一句吧

文档加载是要时间的,从第一帧加载到最后一帧

请等文档加载完成,再做操作,谢谢!
页: [1]
查看完整版本: flash灵异事件