如何取修改flash游戏数据的数据

查看: 2949|回复: 9
FLASH网页游戏的封包如何获取呀?
阅读权限10
在线时间 小时
结帖率: (1/3)
FLASH网页游戏的封包如何获取呀?不知道用什么工具能获取FLASH游戏的封包?封包内容及格式是什么样的?
阅读权限50
在线时间 小时
结帖率: (2/2)
wpe 可以获取到封包数据
thunder://QUFodHRwOi8vY291bnQuZGRvb28uY29tL3JlZGlyZWN0LmFzcD9kb3dudXJsPWh0dHA6Ly9zb2Z0LmRkb29vLmNvbS93cGVfODE0MS5yYXJaWg==
封包内容是一系列字节数据&&内容就不一定是一样的了 看程序员是怎么想的吧
阅读权限90
在线时间 小时
结帖率: (0/2)
& & 用 WEP 抓包
& && & 不过一般封包都进行了加密
阅读权限70
在线时间 小时
结帖率: (5/5)
外行路过,顺道问下。封包一般是什么加密方式!
一般情况下都使用位异或加密,再者就是左移和右移,更复杂点就是符合加密法:先给数据位异或,然后加上一个数。&
阅读权限50
在线时间 小时
结帖率: (0/1)
& && & 不过一般封包都进行了加密
阅读权限10
在线时间 小时
结帖率: (1/3)
将已经加密的封包通过WPE发送出去为什么没有发应?
阅读权限10
在线时间 小时
网页游戏可以用wpe,兄弟,你才进入辅助吧。。开wpe然后进程选择浏览器。。。最好进游戏就开一个浏览器这样子方便查找。。。截获的封包内容和格式随游戏商走的。不一定有固定格式,不过一般flash游戏都是明码很容易破J的。。。多抓点包,对比对比吧。。。。祝愉快。。。。
阅读权限30
在线时间 小时
结帖率: (4/6)
抓到也没用难搞。。。
阅读权限70
在线时间 小时
签到天数: 14 天结帖率: (7/11)
网页游戏自己做过简单的浏览器然后在浏览器中拦截封包,自己需要怎么处理就怎么处理
阅读权限10
在线时间 小时
<font color="#1127609 发表于
外行路过,顺道问下。封包一般是什么加密方式!
一般情况下都使用位异或加密,再者就是左移和右移,更复杂点就是符合加密法:先给数据位异或,然后加上一个数。
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪
违法和不良信息举报电话,企业QQ: ,邮箱:
Powered by2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2016年9月 .NET技术大版内专家分月排行榜第二2016年6月 .NET技术大版内专家分月排行榜第二2016年3月 .NET技术大版内专家分月排行榜第二2016年1月 .NET技术大版内专家分月排行榜第二2015年12月 .NET技术大版内专家分月排行榜第二2015年2月 .NET技术大版内专家分月排行榜第二2015年1月 .NET技术大版内专家分月排行榜第二2014年11月 .NET技术大版内专家分月排行榜第二2014年5月 .NET技术大版内专家分月排行榜第二2014年4月 .NET技术大版内专家分月排行榜第二2012年2月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。C# 怎的读取到网页flash游戏数据 - C#当前位置:& &&&C# 怎的读取到网页flash游戏数据C# 怎的读取到网页flash游戏数据&&网友分享于:&&浏览:267次C# 怎样读取到网页flash游戏数据问题如题目------解决方案--------------------楼主把主动,被动的问题搞反了.应该是flas传数据给C#
------解决方案--------------------恩,它可是编译出来比较复杂的RIA程序,不像什么html/javascipt那样毫无任何保护。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有【原创】Flash游戏制作基础(1)-认识变量_flash制作吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:9,145贴子:
【原创】Flash游戏制作基础(1)-认识变量
【原创】制作基础(1)-认识变量
要用flash制作必须要会使用as编程才行,程序控制了游戏所有的行为。今天我来叫大家如何使用as3.0进行编程。本文为基础教程,适用于初级菜鸟。水平有限,欢迎各位老鸟来指正。
大家学过代数都知道,代数中使用a,b,之类的来表示一些数字。例如c=a+b,c表示结果,a和b表示相加的数,a和b都是可以变动的,同时c也随着a、b的变动而变动。在as3的程序中也是类似,里面的变量就如上面的a、b和c一样,用来保存我们需要的值,它们的值可以根据我们的需要来变动,这些就是变量。
我们需要自己指定变量的名称(例如:a,b,c),命名规则如下:
1.变量名称必须以字母或者 $ 和 _ 符号开头
2.变量名称对大小写敏感(y 和 Y 是不同的变量)
虽然在as3中变量名也可以使用中文,不过不推荐这么做,最好有个规范的命名,以便我们的程序更容易读。
而且是由业界良心粉菠萝...
PC页游『怪物猎人 梅杰...
RT 就像这样 明明一方...
一提到动画改编游戏,各...
火星时代培养高薪游戏人才,学员毕业平均薪资8000以上,高薪就业,明星游戏设计学员年薪百万,圆你高薪就业梦!
为变量起名的过程称为声明,使用关键词"var"来声明局部变量。为变量指定内容被称为赋值,使用“=”来进行赋值。 变量有它的类型,变量类型限制了变量能存储什么样的数据,类型的声明使用“:数据类型”的格式。下面是一个声明变量并赋值的例子:
//声明变量
var a:Number = 1;
var b:Number = 2;
在上面的两行程序中,我们声明了a和b两个变量并分别为他们赋值,这两个变量类型被限制成"Number"类型,Number表示数字类型的数据,声明类型后如果赋值的类型不相符就会报错。下面我们来声明一个新数值型变量c来计算a和b的值:
//计算结果
var c:Number = a +
上面的代码我们声明了变量c作为数值(Number)类型的变量,赋值的时候我们使用了一个运算符来计算a+b的值并把它赋值给了c保存。我们来看看c的值是多少,此时我们使用flash调试使用的一个语句trace()来在输出面板上显示,trace语句只在编程调试有用。
//显示结果在输出面板
Ctrl+Enter编译运行会发现输出面板上显示:3。
我们认识了变量之后让我们来认识与变量相对的常量。常量与变量极为相似。不同之处在于,在 ActionScript应用程序运行期间只能为常量赋值一次。一旦为某个常量赋值之后,该常量的值无法再被改变。常量的生命使用const 关键字而不使用 var 关键字。下面是flash帮助文档里一个生命常量的例子:
const SALES_TAX_RATE:Number = 0.07;
常量用在程序运行过程中都不会改变的值,用于方便我们阅读。
接下来介绍一下as3里的常用数据类型。数据类型分为简单数据类型和复杂数据类型。以下都属于简单数据类型:
Boolean :只有两个值:true 或 false(可以表示两个值是否相等或者一个开关是否开启)。
:表示文本值。比如一个人名、地名或者一篇文章中的文字。
数字有三种:
Number:可以表示任何数字(正数、负数或者小数都可以)。
:一个整数(即不带小数的数)。
:正整数和零。
以下下属于复杂数据类型。复杂数据类型表示是一些数据组合而成的一组值。例如:
MovieClip:影片剪辑元件(可以用来表示动画或者图形)。
TextField:动态文本字段或输入文本字段
:时间中的某个片刻的信息(年、月、日、时、分、秒等等)。
以上只是as3中数据类型的一部分。更多数据类型请参看flash的帮助文档,包含有as3中所有内容,学习as编程必备,是最好的参考文档。附上flashCS4中文帮助文档:
附上fla源文件,flashCS5或者即更高版本可以打开:
 (2)-条件判断 as3中使用条件语句来进行逻辑判断。条件语句有三个。 最基础的一个是:if...else
这条语句意为:如果(条件判断){条件成立的语句}否则{条件不成立的语句}。下面我们用一个例子来说明if...else的用法。《小品主角与配角》中找到队长时大喊:“队长!是我!别开枪!”我们写一段程序来模拟队长的是否开枪的逻辑。 1.首先声明两个变量,一个跑过来的家伙:起名叫guy,然后是队长起名captain:  //一个家伙  var guy:S   //队长  var captain:S 2.然后给跑过来的家伙赋值:   guy="自己人"; 3.if...else逻辑判断:guy是自己人就不开枪,不是自己人就开枪。   //判断是不是自己人   if(guy == "自己人")   {    captain = "自己人,不开枪";   }else   {    captain = "我代表党代表人民枪毙你";   } 4.运行逻辑后输出面板看看队长最后怎么做的:   trace(captain);  可以看到输出的文本是"自己人,不开枪",然后修改第2步为  guy="敌人"; 在运行程序可以看到输出的文本是"代表人民代表党枪毙你"。这就是使用if...else...进行简单的逻辑判断。
  会有同学问,如果既不是自己人又不是敌人,只是一个过路的怎么办,队长不就误伤人了么。是啊,此时我们就需要使用if...else...if...语句进行第三种情况的判断。修改上例中第3步为:  //判断是不是自己人  if(guy == "自己人")  {   captain = "自己人,不开枪";  }else if(guy == "敌人")  {   captain = "代表人民代表党枪毙你";  }else if(guy == "路过的")  {   captain = "原来你是个路过的,赶紧走吧。";  }  然后我们分别修改第2步guy的赋值"自己人"、"敌人"、"路过的",会发现这段语句会根据guy的值进行选择性执行三句语句中相应的一句。如果我们把路过的在细分还会发现有打酱油的,有买菜的等等。我们需要用if...else if...else if...else if....。as3中有一个语句来对应这种判断一个变量的多个可能性的值进行区分执行的方法:语句。格式为:  (要判断的变量)  {   case 值1:    执行语句1       case 值2:     执行语句2    break:     ...   case 值n:    执行语句n       default:     执行都不属于以上情况的语句       }  上式中break表示判断至此终止,后面的case判断不再执行了, 它等价于:   if(变量 == 值1){     执行语句1   }else if(变量 == 值2){     执行语句2   } ...    }else if(变量 == 值n){    执行语句n   }else{     执行都不属于以上情况的语句   }  条件判断的介绍至此结束了。  条件判断if实例:  条件判断实例:
  (3)数组的使用  数组是用于存储和操作多个数据的复杂数据类型,使用编号索引来操作数组内部的单个数据。  1.声明个构造数组有两种方式,一种是使用new Array(),另一种是使用数组访问([])运算符来初始化数组,这两种方式是等价的。例如:   var myArray1:Array = new Array();   var myArray2:Array = [];  2.输入和读取数据的方法。输入数据有多种方式,初始化时输入数据:   var myArray1:Array = new Array(0,1,2,3,4,5);   var myArray2:Array = [0,1,2,3,4,5];  注意:使用new Array()方式初始化数据时,如果元素只有一个且是正整数数字,表示数组长度为此值,并未输入数据,只有输入多个时才可以。例:new Array(3)表示初始化时数组长度为3的空数组,new Array(3,1)表示初始化时入两个数据3和1。  向数组末尾添加一个元素可以使用array.push(元素)方法。例如:   var array:Array = [0,1,2];   array.push(3);  初始化时array为[0,1,2],push程序执行后array为[0,1,2,3];  与push相对的方法为array.pop()方法,意为删除数组最末尾的一个元素。   var array:Array = [0,1,2,3];   array.pop();//执行此语句后array变为[0,1,2]  使用数组访问符([])可以获取指定位置的元素(索引从零开始)。array为一个数组,array[0]表示array开头第一个元素array[1]为第二个元素....以此类推。  3.splice方法可以从指定位置删除元素,删除个数由你指定,并可以将你指定另外的数据插入到删除的位置。用法array.splice(删除位置,删除个数,要添加的元素)。例如var array:Array = [0,1,2,3,4];使用splice删除array中处于位置1和2上的元素则:array.splice(1,2);执行此语句之后array变成[0,3,4]。  4.使用indexOf方法可以获取指定数据在数组中的索引位置。例如数组array=["a","b","c","d"],我要获取"c"的位置,则:var position:int = array.indexOf("c");此时可通过trace(position)得知position的值为2。此时如果要从数组中删除"c"这个元素可:array.splice(position,1);此时trace(array)可知array变成了["a","b","d"]。注:如果数组中没有此元素indexOf返回的值为-1。  以上为数组最基本的一些操作,其他还有一些方法如:shift()删除第一个元素;unshift()从开头添加数组;sort()数组排序等等可参考flash AS3的帮助文档中《ActionScript 3.0 语言和组件参考》中Array类的说明。  数组的使用实例:
   (4)----循环控制  游戏制作中经常会遇到重复执行某一段代码的情况,这个时候需要使用来实现。  先来看看第一个for循环。格式为:   for(计数器初始化;运行条件;计数器改变)   {    重复执行的语句;   }  循环执行时会首先进行计数器初始化,一般是给计数器赋一个初始值然后:   1.判断运行条件是否符合(为true),则执行2,为flase停止循环。   2.执行大括号内重复执行的语句。然后计数器改变,回到步骤1  下面我们来看一个例子。假定我们做的一个弹幕射击游戏Boss放一个大招,同时放出20颗子弹,我们用for循环来为子弹取20个名字“子弹0”到“子弹19”存储到数组里。代码如下:   //声明数组   var nameArray:Array = [];   //声明计数器   var i:      //for循环   for(i = 0;i & 20;i++)   {    nameArray.push("子弹"+i);   }   //将子弹名称输出到面板上显示   trace(nameArray);  我们会在输出面板上看到结果是一行“子弹0”到“子弹19”。  在循环开始时会先执行i=0;然后判断条件i&20是否成立,如果成立则执行numeArray.push("子弹"+i);然后执行i++(++是一个运算符,意思就是在++前面的变量在原有值基础上加1),然后继续判断条件i&20;以此类推,直至i=20时条件不成立则终止循环,执行下面的trace(nameArray)输出数组结果。
flash制作 宣传动画 房地产动画 三维动画 影视动画 产品演示动画 课件制作等!
  另一个是语句。用法为:   (判断条件)  {   ;  }  只要判断条件为真就会重复执行大括号内的。  还有一种是do......这个把条件判断放在了后面,程序开始时会先执行一次循环语句在进行条件判断,即使最初条件不成立时也会执行一次循环。用法:  do  {   ;  }(判断条件);  楼主使用的最多的就是for循环。  附上实例,实例中有实现上面例子的三种循环的实现方法:
   (5)---认识函数  函数是程序的重要组成部分,它的作用是用来实现我们需要的一些操作,把这些操作功能打包成一个整体。  你可以把函数看成一个专门用于某种操作的工具。好比我们平时使用的计算器,它可以帮助我们进行加减乘除运算,我们要做的就是输入计算所用的参数,它会自动把结果显示出来,非常方便。如果不用计算器,我们自己也能算出结果,但会麻烦很多。程序也是一样,我们程序中用到的很多功能都不只用到一次,把这些功能写成函数,就不用每次用到的时候再重新写一遍。  函数还有一个好处就是封闭性,我们使用的时候不必知道函数是怎么写成的,只需要知道输入哪些参数就可以得到我们需要的结果。就想我们之前使用的trace()函数就是 ActionScript 3.0 中的顶级函数,我们不知道trace这个函数内部是怎么写的,但也不需要知道,只要知道调用的时候传入字符串参数,这些参数就会显示到输出面板上就可以了。  函数的使用我们之前已经接触到了,我们来看看是怎么使用trace这个函数的,示例:   trace("我爱吧!");  我们可以看到使用函数的方法,非常简单:函数名(参数);这样这个函数就会被调用成功了。  如果要调用的函数没有参数,小括号也不能省略。例如我们使用获取随机数的函数来获取一个随机数,这个函数能返回一个0到1之间随机一个小数,不需要任何参数:   var randomNumber:Number = ();  上例中randomNumber赋值时"="右边不是一个直接的数值而是()这个函数,这么写的意思就是:把Math.random()运行后的结果赋值给randomNumber。系统收到这行代码时,会先把“=”右侧的函数执行完毕,得到一个值,然后把这个值赋值给左侧的变量。
  下面我们来看看如何定义自己的函数。自定义函数格式如下:   function 函数名(参数:数据类型):返回值数据类型   {    函数体语句;   }  上面格式中的"参数:数据类型"的个数可根据需要指定,没有时不写。“返回值数据类型”不写的话系统会默认为“void”,意思就是不返回任何值。如果函数需要返回值(就像我们刚才用的()函数执行后会得到一个值,这个值被复制给变量randomNumber),函数体语句中需要添加return语句,格式为:   return 返回的值;  return语句除了返回值之外还类似之前语句中的break,会中断函数的运行,return语句之后的都不会被再执行了。  下面我们来实现一个函数的例子具体说明,这个函数的需求为:输入两个值,得到这两个值的和。代码:   //函数起名为getSum,两个参数名分别为:num1,num2   var n1:Number = 20;   var n2:Number = 40;   var n3:Number = getSum(n1,n2);   trace(n3);   //函数起名为getSum,两个参数名分别为:num1,num2   function getSum(num1:Number,num2:Number):Number   {    var sum:Number = num1 + num2;            trace("函数最后一行");   }  这段代码运行后会在输出面板上显示结果:60,而函数内部"函数最后一行"这一句没有输出,这说明这一行没有被执行,被return跳过了。函数声明的返回值类型必须和return 返回的值类型相匹配,不然会报错。如果你的函数声明了返回值类型,那么函数体内必须有return 返回一个值,不然也会报错。
  注意:函数内部var声明的变量,只在函数内部有效,输入的参数变量也是一样。拿上例来说,getSum函数内部有三个变量,两个输入参数变:num1和num2和一个新声明的变量sum,他们的有效区域也就在上下两个大括号“{”和“}”之间,而在函数外面你也只能在心里缅怀一下它们了,因为它们已经被系统人道毁灭了。函数内部的变量不能在函数外面使用,而函数外的变量却是能在函数里使用的,跟在函数外面使用方法一样。如果函数内部声明了与函数外变量名称相同的变量,则内部变量有效,要访问外部同名变量需使用:"this.变量名"进行访问。  附函数使用实例:
   (6)面向对象编程简介  面向对象的编程 (OOP) 是一种组织程序代码的方法,方便于代码的组织和管理。这种方法将代码划分为一个个的对象,即包含信息和功能的元素。通俗的说就是一个对象有什么数据和能做什么,拥有的数据被称之为属性,能做些什么的功能被称为方法。那么,一个应用程序中会产生很多的对象,为了区分这些对象我们要用到类这个概念。就像我们所在的世界,一个人、一部手机、一个杯子都是对象,为了区分这些对象,我们把它们分为不同的类,分类的方式就是根据他们行为结构的不同。在程序中,我们就需要将我们的代码进行归类总结,将一些具有相同行为结构的代码分为一个类,一个类就是一个类型的数据结构。  类写好了后怎么用呢,我们使用关键字new创建属于一个类的实例:   new 类名称();  我们可以声明一个变量存储这个实例:   var instanse:类名称 = new 类名称();  这样我们就获得了一个相应的类实例instanse。  当我们分的类很多时,以及当我们需要和别人共享代码时,就不可避免的会遇到类名称冲突的问题。所以有了包这个概念来减少命名冲突的机会。  有时我们只想让某些类或某些属性只能在类内部用,不对其他的类开放使用,这就是命名空间的作用。通用命名空间有三个:   public :对所有位置可见。   internal:对当前包内部可见。   private:只此类内部可见。   protected:只对类和子类(等会将在讲继承时会讲到)内部可见。  包和类对子对象的引用都要用到点运算符(.)来表示,说明点后面的属于前面的。在类内部使用自身的属性或方法可以直接调用属性名称,当类属性名称与类内部函数局部变量名冲突时要调用类属性可以使用关键字this加点运算符(.)。
  了解了以上知识,我们就可以创建我们的第一个类,下面我们来创建一个描述鸟的类Bird:   package myPackage {
    public class Bird{
     public function Bird() {
     }    }
   }  上面package myPackage 声明了当前正在写的类在包myPackage中。与类名称相同的函数叫,它是用来在类的实例创建时进行一些初始化的操作。这个函数会在类实例创建的过程中运行一次,因为一个类实例只会被创建一次,所以构造函数也只会被执行一次。当你不写这个函数时,系统会自动创建一个空函数执行。不过当前类里面什么属性方法也有,只是一个空类,下面我们给它添加方法飞(fly)和叫(shout):   public function fly():void   {    trace("鸟在飞!");   }   public function shout():void   {    trace("鸟在叫!");   }  下面我们为了区分同类的不同鸟我们给每只鸟起个名称,添加名称属性(name),并在类实例生成时就要起好名称:   public var name:S   public function Bird(name:String)   {    //在这里函数的参数名name和类属性name冲突,    //类属性name被覆盖掉了所以要调用类属性必须用this.name获取到    //否则无法为类属性name赋值。    this.name =   }   //输出实例名称好知道是哪只鸟在叫   public function fly():void   {    trace(name+"在飞!");   }   //输出实例名称好知道是哪只鸟在飞   public function shout():void   {    trace(name+"在叫!");   }  好了我们的Bird类写好了,现在在舞台上动作面板创建一个Bird的类实例,不过首先我们要导入我们的类。如果你的类不在根目录下,系统不会自动引用你的类进行编译的,所以需要用关键字import来导入格式为:import 包路径.类名称。所以我们先导入:   import myPackage.B   //导入好了开始创建为它起名   var bird:Bird = new Bird("啄木鸟伍迪");   //让伍迪飞   bird.fly();   //让伍迪叫   bird.shout();  Ctrl+Enter运行会得到结果:   啄木鸟伍迪在飞!   啄木鸟伍迪在叫!
  不过,我们刚创建的Bird类只是一个基础的类,用来表示鸟这一类别的行为属性,有点笼统,因为鸟还细分为很多种类,当我们需要用到一种具体种类的鸟时,面向对象的另一个机制:继承,可以给我们很大的便利。继承允许我们在一个类的基础上开发新类,新类会拥有被继承类的所有属性和方法,使我们不用再将实现这些属性和方法的代码重新写一遍。被继承的类被称为基类或超类,可以称为新类的父类,新类则被称为父类的子类。继承使用关键字 extends 指明类从另一类继承。  虽然子类拥有所有父类的属性和方法,但是子类并不能调用全部的这些属性方法。父类中所有private关键字声明的属性和方法在子类中都无法调用,而protected声明的则可以在子类中使用,而public(公有的)声明的可以随便用,随处用。  下面我们来在Bird类的基础上写一个新类:Duck,也就是鸭子。鸭子这种鸟具有一种全新的行为特征:游泳。不过可惜的是它学会了游泳却忘记了如何飞,真是收之桑榆,失之东隅啊!下面我们创建此类并添加游泳方法:   package myPackage {
     public class Duck extends Bird{      public function Duck(name:String) {                super(name);      }            //游泳方法      public function swim():void      {        trace(name+"在游泳!");      }     }
   }  注意到了关键词super了吧,super()代之父类的构造函数,括号内的参数数目和类型同父类一样,不一样的话会报错。  现在我们的鸭子类已经完成,并多了swim方法让鸭子可以游泳了。不,还没完成,因为鸭子不会飞!我们在调用Bird的fly方法时会输出“xxx在飞!”,而显然这个方法不适用与鸭子,所以我们需要重写fly方法,将父类的fly行为失效。覆盖父类方法使用关键字override,重写的方法要求方法名称、参数个数、参数类型、返回类型完全一样,不然你会受到系统报错的打击报复了。除了以上要求,其他随意。下面我们来复写fly方法。什么?你说鸭子是呱呱叫的?好吧,我们就让鸭子呱呱叫好了:      //重新覆盖fly方法      override public function fly():void      {        trace(name+":开玩笑吧!我是一只鸭子哎!你让我飞!智商捉急啊!");      }      //重新写shout方法      override public function shout():void      {        trace(name+":呱呱呱呱!");      }  好了,现在鸭子比较完美了!让我们来造一只看看效果:    //首先要导入类,不然会报错的哦    import myPackage.B    import myPackage.D    //造一只鸟,名字叫啄木鸟伍迪    var bird:Bird = new Bird("啄木鸟伍迪");    bird.fly();    bird.shout();    //造一只鸭子,名叫达菲鸭    var duck:Duck = new Duck("达菲鸭");    duck.fly();    duck.shout();    duck.swim();  Ctrl+Enter运行程序!    啄木鸟伍迪在飞!    啄木鸟伍迪在叫!    达菲鸭:开玩笑吧!我是一只鸭子哎!你让我飞!智商捉急啊!    达菲鸭:呱呱呱呱!    达菲鸭在游泳!  效果很好,完全符合预期。我们重写了子类Duck的fly和shout方法,让子类有了跟父类名称相同结果不一样的行为,并且子类的更改完全影响不到父类,这就是继承的精妙之处。
  好了今天的面向对象编程的介绍就到这里了,希望各位新手小伙伴多多亲自动手练习,写几个自己的类,看的再多也不如亲自动手。在基础阶段,多动手写自己的程序才是快速进步的最佳方法!  附上本次鸭子类实例:  实例需要CS5或以上版本可以打开,如果你的Flash版本较低,可以自建AS3的fla文档,将教程中的代码拷贝到时间轴动作面板中。
贴吧热议榜
使用签名档&&
保存至快速回贴

我要回帖

更多关于 flash网页数据 爬取 的文章

 

随机推荐