你的Blog名称

欢迎使用Z-Blog,有问题或意见请到Zblogger.BBS社区反馈,谢谢您的参与使用。

« 变量作用域(scope chain)noscript标记和预缓存图像 »

使用Flash事件监听对象模型开发程序

如果你能熟练使用Flash MX 2004组件,相信你对事件监听对象模型会很熟悉;如果你也知道mx.events.EventDispatcher 类的使用方法,那么这篇文章将会非常适合你。

有了mx.events.EventDispatcher 类我们就可以将事件监听对象模型在Flash开发的每一个地方发光发热。使用它的好处是什么呢?就我目前所知,你能更好的控制你的程序的核心逻辑,让你不再被复杂的逻辑处理搞得头晕脑胀。下面以一个简单的实例来解释怎样使用Flash事件监听对象模型开发程序。

请先下载范例文件,解压缩后使用Flash MX 2004专业版打开,然后粗略看一下文件结构。

屏幕结构图

About屏幕和 Contac屏幕初始是不可见的,可以在“属性面板”上的“参数”选项卡将 visible属性设为false。

设置visible属性

Nav屏幕放置了三个按钮,点击按钮将会导航到不同屏幕显示不同信息。



Nav屏幕关联的类是 com.flashshe.Nav 如下图:

屏幕和类关联

可以在 com/flashshe目录找到这个文件,打开后可以看到三个按钮被点击后会广播一个自定义事件 "navClicked"

private function onWelcomeBtnClicked(evt){
    dispatchEvent({type:"navClicked",detail:"welcome"});
  }
  
  private function onAboutBtnClicked(evt){
    dispatchEvent({type:"navClicked",detail:"about"});
  }
  
  private function onContactBtnClicked(evt){
    dispatchEvent({type:"navClicked",detail:"contact"});
  }


同时我加上了另外一个参数“ detail”,这个参数的作用会在后面的讲解中说明。

所有的逻辑处理放在了HandlerView屏幕。HandlerView屏幕关联的类是 com.flashshe.HandlerView,可以在 com/flashshe目录找到这个文件,打开后可以看到如下代码:

private function onLoad(){
    navScreen.addEventListener("navClicked",this);
  };


上面的代码将HandlerView屏幕注册为navClicked事件的监听器,即是说当我们点击了Nav 屏幕的任何一个导航按钮后,Nav 屏幕广播一个navClicked事件,然后这个事件被HandlerView屏幕捕捉,接着函数navClicked()被执行。

private function navClicked(evt){
    _global.visibleScreen.visible = false;
    
    if(evt.detail == "welcome") {
      welcomeScreen.visible = true;
      _global.visibleScreen = welcomeScreen;
    }
    if(evt.detail == "about") {
      aboutScreen.visible = true;
      _global.visibleScreen = aboutScreen;
    }
    if(evt.detail == "contact") {
      contactScreen.visible = true;
      _global.visibleScreen = contactScreen;
    }
  }

看了上面的代码,你该明白事件对象的detail参数的作用了吧。
当然了为了讲解的方便我把这个范例做的很简单,所以看完这篇文章后你可能觉得使用 Flash 事件监听对象模型开发程序并不没有给你带来什么便利,如果你真这样想的话你可以将这个例子发散开,想想一个更复杂的程序,可能你会有更深的理解。

如果你能够理解我的这篇文章并且尝试后能成功的话你可以下载 Ariaware RIA Platform,利用它你能够开发大型的可维护的多人合作的Flash应用程序。

考虑到Ariaware RIA Platform原作者提供的范例使用了remoting,mySQL和Java技术,而很多人对这些并不懂,所以我会在以后的空余时间里做一个更简单的Ariaware RIA Platform范例提供给大家。
  • quote 1.N神
  • 是想学习学习这方面,可惜不会这种幻灯片格式的,不知道这个有什么好处,觉得还是传统的好。。。
  • 2005-8-25 10:23:34 回复该留言
  • quote 2.N神
  • 这个格式怎么关联的类,没找到 = =~
    ps。你的连接偶加上了,偶的连接你貌似加错了。。多了个http
  • 2005-8-25 11:16:41 回复该留言
  • quote 3.jackyshe
  • 首先选中一个屏幕,然后在属性面板点击“属性”选项卡,在“类名称”上
    写上类就可以将类与屏幕关联。我在文章里面新加了一张图片,你可以看看。

    以前我也使用传统方法,后来使用了表单后就不再用了,因为使用屏幕你能够更好的组织和管理你的内容。big_smile
    代码也好管理。使用传统方法总感觉是把一大堆东西堆在一起,乱。amazed
  • 2005-8-25 17:13:45 回复该留言
  • quote 5.casy
  • 用表单的方式很好啊,起码反编译会不成功boss
  • 2005-9-8 15:23:06 回复该留言
  • quote 6.casy
  • 大师,有没有学习用类写FLASH的好书介绍啊,我看很多书都跟字典或入门书籍差不多cry_buttery
  • 2005-9-8 16:41:07 回复该留言
  • quote 7.casy
  • FLASH MX Professional 2004应用开发 这本书你看过吗?作者是Jeanette Stallons 听说是基于AS 1.0的,但是中文版译作的出版日期是05年7月1号,原作的出版日期是04年4月30号angry的,不知道是不是同一个版本哦angry
  • 2005-9-9 9:16:50 回复该留言
  • quote 8.jackyshe
  • 当然了,比较有名的是 “as 2.0 本质”这本书,中文书几乎没有,你可以在网上艘艘英文书。
  • 2005-9-9 9:39:10 回复该留言
  • quote 10.casy
  • 想请教你个问题,最近开发FLASH游戏,但是每次一把FLASH关掉,再开,所以东西都会乱了套,你知道是什么原因吗?我已经一个月没关机了embarrassed_buttery
  • 2005-9-9 14:10:30 回复该留言
  • quote 12.casy
  • 都乱了套了,怎么说得详细呢,难倒我了i_have_no_idea,比如说MC A里面的东东会跑到MC B里面去,诸如此类的,最终导致运行失败bad_smile
  • 2005-9-10 11:15:00 回复该留言
  • quote 13.casy
  • 大师,再问你个问题,有没有什么好方法防止别人重复提交呢?就是连续按几次按钮?我试过enabled=false,试过写个参数让他点击后参数值变,也试过两个都一起用,感觉效果都不明显,好象点了之后要过一下下才起作用。sigh
  • 2005-9-19 12:26:49 回复该留言
  • quote 14.jackyshe
  • 1、提交后将内容全部清空。()
    2、将内容全部记录在变量里面,当提交的时候将内容与保存在变量里的内容比较,如果一样就不能提交。

    以上方法也并不能完全阻止重复提交,但是会让一些无聊的人停止重复提交。
  • 2005-9-20 12:01:41 回复该留言
  • quote 15.casy
  • 恩,我明白你的意思,虽然这些工作都是有效,但是每次执行起来还是会有一些的延时,就是说第一次按按钮,本来应该release了之后马上失效的,但还是会再等一下才失效,所以就阻止不了那些快速连击的,你知道为什么会有延时的现象存在吗?
  • 2005-9-21 15:00:31 回复该留言
  • quote 16.casy
  • 我是很菜很菜的,诚心向您请教,给你发个链接,是最近改的游戏,我们每次看后台都总会发现有有人可以在同一秒发送过来成绩,很苦恼
    http://sail.pcauto.com.cn/sail/index.do
  • 2005-9-21 15:03:25 回复该留言
  • quote 17.casy
  • 还有这个地方http://game.pcauto.com.cn/cfcGame/Index.do挺惨不忍睹的
  • 2005-9-21 15:19:13 回复该留言
  • quote 18.jackyshe
  • 你的意思是有多个用户在同一时刻发送数据到数据库是把,这个问题因该是后台程序(asp,php等)编写人员解决的,并且这是网络程序的一个最基本的需要解决的问题。你问问编写后台的人是不是没有写这个功能。

  • 2005-9-21 16:47:00 回复该留言
  • quote 19.jackyshe
  • “就是说第一次按按钮,本来应该release了之后马上失效的,但还是会再等一下才失效”
    我测试了一下:普通按钮元件,和Button组件,当我设定释放鼠标后按钮失效后,按钮得确失效了没有你说的延迟现象(我用了很快的速度双击)。不知道你那儿怎么回事。
    防止重复提交分数,你可以在用户提交成功后转到另外一个页面。
  • 2005-9-21 16:54:38 回复该留言
  • quote 20.casy
  • 不是多个用户同一时间提交,是同一用户在同一时间提交多次
  • 2005-9-21 17:03:15 回复该留言
  • quote 21.casy
  • 本来用编辑器或者直接用FLASH PLAYER都不会有问题,但是一放到页面,传到服务器上,用浏览器浏览的时候就会反应有点慢,其实也不止按钮会出现这种有延时的情况,其他普通的场景有时也会有滞后,不知道你遇到过没有
  • 2005-9-21 17:05:13 回复该留言
  • quote 22.jackyshe
  • 是有这种问题,你可以设置当用户完成游戏后,跳转到另外一个关键帧,在这个帧上有提交按钮,这样flash没有大量的代码运行,执行起来应该很快。
  • 2005-9-21 17:48:51 回复该留言
  • quote 24.casy
  • 大师,有没有遇到过打不开AS文件的情况呢?我创建了AS文件之后,打开就说打开文档失败,重装了也一样i_have_no_idea
  • 2005-10-9 11:20:51 回复该留言
  • quote 25.jackyshe
  • 没遇到过,你拷贝到写字本里面,再从Flash导入也不行吗。
  • 2005-10-10 8:46:04 回复该留言
  • quote 26.casy
  • 大师,要做一个图片浏览器,功能就跟MSN SPACES里面的差不多
    http://spaces.msn.com/members/casybb
    但是每副图的转换要象网页的焦点图那种有FILTERS的效果,而且下面的按钮风格可以选择的
    你有什么好建议吗?谢谢啊big_smile
  • 2005-10-10 15:23:06 回复该留言
  • quote 27.jackyshe
  • 我也没什么比较好的建议,主要是看你自己的编程能力和思考方式。我相信你通过自己的努力一定可以成功。兄弟,加油!!!!!
  • 2005-10-12 9:15:40 回复该留言
  • quote 28.Casy
  • 大师,想请教一下,同一个文件,是FLASH MX 2004 PRO版生成的,然后另存为FLASH MX版,本来256KB的东东就会变成216KB,那中间少了40KB,你知道原因吗?谢谢
  • 2005-10-28 17:34:52 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Spirit Build 80722 Code detection by Codefense

Copyright xxxx-xxxx Your WebSite. Some Rights Reserved.