9RIA.com天地会 - 论坛

返回列表 发帖

天地培训

9RIA天地会官方培训机构

Adobe官方认证培训中心

有没有更好的方法解决这个问题

原文章在:http://etthink.5d6d.com/thread-601-1-1.html
这个可能不能说是as3的问题,但确实这样写代码不方便,想找一个解决的方法,大家帮帮我吧。
今天在flash cs中做课件时遇到这个问题:
如果有两帧,我在第二帖上放上按钮(a_btn),但我想把代码全写在第一帖里(这样看起来比较方便,但问题就出现了):
                                                
                                                                                                
代码:stop();
a_btn.addEventListener(MouseEvent.CLICK,startF);
function startF(event:MouseEvent):void{
        //
        //        
        }
将会出现这样的错误:TypeError: Error #1009: 无法访问空对象引用的属性或方法。
我知道,因为flash运行时是按时间轴顺序来执行代码,现在只执行第一帧,还没有运行到第二帧(按钮所在 的帧)如此只好把代码放到第二帧上,但这样做很不方便,想请教大家有没有好的解决办法。

[ 本帖最后由 qiexing 于 2007-12-17 08:16 编辑 ]
且行且思,愈行愈远
且行资源:http://www.qiexing.com

天地人才库
把按钮放在frame1,并且给按钮命名,然后在frame1让btn.visible = false,frame2 让btn.visible为true,至于事件的注册,事件只注册一次

TOP

最好的建议是 如果只是用FLASH来做课件的话~~~~请一定用flash8~~~~~
用flash cs3在侦上写代码,会出现你意想不到的很多错误提示~~~~官方似乎不提倡在侦上写代码了~
自信的一笑!
个人AS博客: http://oliwen.blog.163.com

TOP

好兄弟,讲义气!---by eko

踏上天地会荣耀之路!

 

申请舵主

加入掘金队

加入译林军

知识专题整理

 

咨询(QQ):

1442604479(小地)

 

回复 #3 oliwen 的帖子

俺晕,失望中,失望中
且行且思,愈行愈远
且行资源:http://www.qiexing.com

TOP

  现在还有一种策略,就是把代码写在外面,不写在第一帧上,把类在邦定到按钮上。这样你的按钮事件,就实现了。

  这个想法就是你只能适应不变的代码使用方式,代码不会因为某个人的意愿,而改变自身的调用顺序。

TOP

回复 #5 龙城flash 的帖子

现在也想是这样方法比较好,应当把代码单独写出来,不一样的功能就写不一样的类,虽然一个课件会增加复杂性,但积累起来肯定会提高以后的效率。
且行且思,愈行愈远
且行资源:http://www.qiexing.com

TOP

回复 #3 oliwen 的帖子

全在主时间上的话,可以用这种方式,要求不能在同一位置不要有不同的按钮了,也有限制。
且行且思,愈行愈远
且行资源:http://www.qiexing.com

TOP

老实说,我完全不懂得如何在CS3里面用代码控制元件了...我都退化到只会做一帧动画了....
哥们,行行好别拜我了,我还没死

TOP

办法是人想地嘛,写了个例子给你。
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
2

评分人数

  • 清水

  • 龙城flash

清水 赐本贴 银子 + 10  诏曰: 多谢热心帮助天地会兄弟^^
龙城flash 赐本贴 威望 + 1 银子 + 2  诏曰: 有源码的好帖

TOP

原帖由 猫粮 于 2007-12-18 00:03 发表
老实说,我完全不懂得如何在CS3里面用代码控制元件了...我都退化到只会做一帧动画了....

这就是高手的特征吧
且行且思,愈行愈远
且行资源:http://www.qiexing.com

TOP

回复 #9 Aone 的帖子

非常感谢Aone!!!!!
且行且思,愈行愈远
且行资源:http://www.qiexing.com

TOP

回复 #9 Aone 的帖子

再看你写的代码,让俺学习了,谢谢,谢谢再谢谢!
且行且思,愈行愈远
且行资源:http://www.qiexing.com

TOP

又学到了一种好方法。

TOP

原帖由 Aone 于 2007-12-18 11:05 发表
办法是人想地嘛,写了个例子给你。



代码看了,写的很好。帖在这里大家共享。。。


  1. import flash.events.*;
  2. stage.addEventListener(Event.ADDED,addBtnListener);
  3. var btnList:Array=new Array;
  4. function addBtnListener(event:Event) {
  5. var addName:String=event.target.name;
  6. for (var i:int=0; i<btnList.length; i++) {
  7.   if (btnList[i].name==addName) {
  8.    event.target.addEventListener(MouseEvent.CLICK,btnList[i].myFunction);
  9.    btnList.splice(i,1);
  10.    break;
  11.   }
  12. }
  13. }
  14. btnList.push({name:"btn",myFunction:test1});
  15. btnList.push({name:"btn1",myFunction:test2});
  16. btnList.push({name:"btn2",myFunction:test3});
  17. function test1(event:MouseEvent) {
  18. trace("第1个被按了....");
  19. play();
  20. }
  21. function test2(event:MouseEvent) {
  22. trace("第2个被按了....");
  23. play();
  24. }
  25. function test3(event:MouseEvent) {
  26. trace("第3个被按了....");
  27. play();
  28. }
复制代码

TOP

Aone 注册于 2007-12-7 ,注册第十一天,第一次发帖, 代码写的好。

TOP

返回列表