AS1.0/2.0 改写成 AS3.0 难吗?一款中型的flash游戏改写,大概需要多少时间和成本?
做为一个从AS1一路写到AS3的程序员,我来回答一下。首先需要声明的是,关于难不难,每个人有自己的判断标准,这个我不会回答。其次需要声明的是,我也无法回答大概需要多少时间和成本,但看完我的回答后,你应该能自己计算出来。AS从1到2,其实没有什么本质的改变,AS2.0只是加入了一个似是而非的class关键字而已,最终编译成的字节码,还是一样的。而AS3就完全不同,从FlashPlayer9(第一个支持AS3的Player)开始,FlashPlayer就内置了2套***M虚拟机,***M1针对AS1+2,***M2针对AS3。AS3甚至专门加了一个类***M1Movie来处理AS1+2的MC,看这个:。我认为,即使说AS3是另外一门语言也不为过。个人升级经历我在从AS1转到AS2的时候,没什么太难的感觉。当时只是深入学了一些面向对象编程概念和设计模式知识,这些概念都是面向对象编程必学的内容,是放之语言四海皆准的准则,对于有大量项目经验的人来说简直就是让你高端大气上档次的非学不可的必要知识,与语言本身倒没有太大关系。可是,从AS1+2转到AS3,我就彻底崩溃了。这TMD完全就是一门不同的语言嘛!用法变了不说,和AS2的面向对象完全两码事,以前写的类绝对是不能用的;以前的编程经验,技巧、语法糖大部分都无效了啊啊啊。而且AS3已经完全面向对象,对习惯在时间轴上写代码的 普通、文艺闪客 来说,是非常非常的不友好了。我认识的AS程序员(或者叫社稷师更好)中,不愿意转向AS3的不少,还有朋友一直到现在都停留在AS1中,依然在时间轴上写代码;依然认为 addEventListener 神马的是很讨厌的事情,依然用 mc._x = 100 用得不亦知乎。当然,作为一个有理想无底线的 2B闪客 ,迁移到AS3是必须的。下面是几个迁移中涉及的方面。工具层面AS1的工具,只有Flash IDE了。实际上,Actionscript这个名字,也是从Flash 5开始才有的,以前在Flash 4及以前,这门语言是没有名字的。而到了AS2,就可以增加一个选择----MTASC: 。这是个速度超快的编译器,可以把AS2源码编译成 SWF bytecode。是的,它比Flash IDE的编译要快很多很多。但是,MTASC的问题在于它并非是Adobe制作的,它是一个第三方工具。但即使是这样,它也成了最好的AS1/AS2编译器。它为不使用Flash设计工具,纯粹使用文本编辑器生成SWF文件提供了可能。也为纯粹的程序员加入到SWF制作队伍铺平了道路。到了AS3时代,由于Flex SDK的出现,我们可以使用MXMLC这个编译器来把AS3源文件直接编译成SWF格式。我们已经可以完全抛弃Flash IDE工具了,完全用代码来制作SWF文件。我们可以忘掉图像元件、按钮元件、影片剪辑、时间轴、Library和Scene,我们可以不在时间轴上制作补间,不用再考虑gotoAndPlay()或者stop(),不必在时间轴上放代码,也不必在库中“导出元件”了。上面的转变大么?真的很大。你希望从AS1/2转到AS3,就要习惯这些工具的变化,同样也要习惯从“社稷师”到“程序猿/媛”的变化。语言层面这块说起来就大了,我举个实例吧。下面是一段 AS1 代码:_root.arrow1._x = v.p1.x*game.step;
_root.arrow1._y = v.p1.y*game.step;
_root.arrow1._rotation = 180/Math.PI*Math.atan2(v.vy, v.vx);
下面是迁移到 AS3 的代码:_arrow1.x = _dragger1.x;
_arrow1.y = _dragger1.y;
_arrow1.rotation = 180 / Math.PI * Math.atan2(_v.y, _v.x);
嗯,看起来很像。但AS1在属性前面多了下划线,还有就是多了无处不在的_root。如果只说下划线,那么有许多属性,其实本来就没有下划线……在AS1中,有的有,有的没有,而在AS3中,统一都没有……上面的代码来自于这里:其中AS1的部分在这里:AS3的部分就是这个文件:下划线只是很小很小的一部分,另一个很重要的问题,就是类的变化。AS1是基于ECMAScript标准的,与JS的语法几乎完全一致,是在JS的基础上加入了一些Flash特有的类(例如MovieClip等等),可用的功能比较少。而AS3其实是增加了非常多的类,许多类与AS1名称一致,但功能已经大不相同。例如XML类,在AS3中与AS1中的XML已经不是同样的功能。AS1中的XML在AS3中被重命名为XMLNode。最大的差别,是编程习惯上的。上面讲到,设计师们习惯在时间轴上写代码,在Flash IDE中,也可以直接在元件上写代码,这种灵活和可视化的方式,让设计师们很高兴。可是程序员们不高兴。因为代码放得太分散,往往很难找。我不知道一段代码是在哪个MC中的某个MC中的其中一个按钮的实例上,还是在某个MC的某个MC的某个帧上?这完全不是程序员们的style。AS3加入了强类型,也加入了包、类等面向对象风格,但设计师们不买账。可是如果还是用以前的做法,程序员们又不买账。分裂开始了。多个迁移的例子最近我把TONYPA写的 Vectors for Flash 教程中提供的范例从Flash 5迁移到了Actionscript 3。没有fla文件,顿时整个世界清静了。如果你更喜欢直接看例子的话,上面的废话都不用看。legacy文件夹中的fla文件,是用Flash 5制作的。而src文件夹中的内容,是用Actionscript 3写成。你一定要习惯没有fla文件的生活。
已有帐号?
无法登录?
社交帐号登录
zengrong.net2695人阅读
游戏开发(5)
心路历程(15)
转载请注明来源.谢谢合作
&& 游戏服务器开发已经告一段落,现在进入客户端的开发了.选来选去,还是觉得用FLASH简单点,具体好处也不多说了.学习嘛,自然得找两个东西练练手,从网上找到了一个小坦克AS2源码,研究了下,并将他用AS3重写了下.代码拙劣,请多包含.
&&& 首先新建元件-&影片剪辑-&炮台.简单绘制了个坦克的炮台.如图
&记得中心点对齐,返回主场景,继续新建影片剪辑-&车身,如图;
是不是记得有点简陋啊.呵呵,我又不是美工,简单为主.&记得中心点对齐,返回主场景,继续新建影片剪辑-&坦克,从库里把车身和炮台组合成一张坦克,给炮台起个实例名-pt.如图.
基本有点像了?...然后返回主场景,打开库面板,选择坦克-&右键属性,链接坦克类tank.as
编辑tank.as
输入如下代码:
import flash.display.MovieC
import flash.events.KeyboardE
import flash.events.E
import flash.display.S
public class tank extends MovieClip
var key=new Key(stage);
var speed = 0;
public function tank()
// constructor code
addEventListener(Event.ENTER_FRAME,ef);
public function move()
y -= (Math.cos(Math.PI/180*rotation))*
x += (Math.sin(Math.PI/180*rotation))*
function ef(e:Event)
//发射炮弹
if(key.isDown(32))
var b=new boll(rotation+pt.rotation);
stage.addChild(b);
b.scaleX=0.1;
b.scaleY=0.1;
b.y=y-(Math.cos(Math.PI/180*(rotation+pt.rotation)))*35;
b.x=x+(Math.sin(Math.PI/180*(rotation+pt.rotation)))*35;
if (key.isDown(90))
pt.rotation +=
if (key.isDown(88))
pt.rotation -=
if (key.isDown(38))
if (key.isDown(40))
if (key.isDown(37))
rotation -=
if (key.isDown(39))
rotation +=
//重力加速度
if (key.isDown(38) && !(key.isDown(40)) && speed & -3 && speed & 3)
if (key.isDown(40) && !key.isDown(38) && speed &- 3 && speed & 3)
if ((speed&0.1) && !key.isDown(38) && !key.isDown(40))
if (( speed & -0.1) && !key.isDown(38) && !key.isDown(40))
if (key.isDown(38) && key.isDown(40))
if ((speed&-0.1) && (speed&0.1))
speed = 0;
//限制区域
if (x &= 0)
else if (x&=550)
if (y &= 0)
else if (y&=400)
移动计算的核心代码是这段
&&public function move()&&{&&&y -= (Math.cos(Math.PI/180*rotation))*&&&x += (Math.sin(Math.PI/180*rotation))*&&}
通过正弦余弦函数计算出新的坐标点.rotation属性是影片剪辑是旋转角度,值为+-180 or 0;
由于AS3已经没有Key.isDown()函数了,所以我又重新写了个key的代替模拟类.对很多人应该很有用的.
import flash.display.S
import flash.events.KeyboardE
public class Key
function Key(s)
obj = new Object();
s.addEventListener(KeyboardEvent.KEY_DOWN, keydownHandler);
s.addEventListener(KeyboardEvent.KEY_UP, keyupHandler);
function isDown(key)
return (obj[key] ? true : false);
function keydownHandler(event)
obj[event.keyCode] =
function keyupHandler(event)
obj[event.keyCode] =
继续新建影片剪辑-&炮弹,画个小圆.
老规矩,一切从简.返回主场景,为改剪辑连接一个专用类,boll.键入如下代码.
import flash.display.MovieC
import flash.utils.T
import flash.events.TimerE
public class boll extends MovieClip
var t:Timer=new Timer(10);
public function boll(rr:Number)
// constructor code
t.addEventListener(TimerEvent.TIMER,tm);
public function move()
y -= (Math.cos(Math.PI/180*r));
x += (Math.sin(Math.PI/180*r));
function tm(e:TimerEvent)
//trace("x="+x+"y"+y+"stage.width="+stage.stageWidth);
if(x&20||x&stage.stageWidth-20 ||y &20 ||y &stage.stageHeight-20)
stage.removeChild(this);
public function go()
t.start();
里面用了一个定时器循环计算炮弹移动的位置,你也可以给计时器加个次数限制,时间到就爆炸.呵呵.
发射炮弹是的代码在坦克类里是如下
&&&//发射炮弹&&&if(key.isDown(32))&&&{&&&&var b=new boll(rotation+pt.rotation);&&&&stage.addChild(b);&&&&b.scaleX=0.1;& //缩放&&&&b.scaleY=0.1;&& //缩放&&&&b.y=y-(Math.cos(Math.PI/180*(rotation+pt.rotation)))*35;& //设置炮弹位置到炮口&&&&b.x=x+(Math.sin(Math.PI/180*(rotation+pt.rotation)))*35;&&&&&b.go(); //发射&&&}
OK,接着就是自己在一个空的场地里乱打炮了.呵呵,很无聊,主要是为了练习.呵呵,有机会继续深入制作.
&&&& 穆先生制作,欢迎加入我的游戏开发群.我的QQ:
附上源代码:
鼠标右键另存为,然后将他改名tank.rar,解压就行了.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:58753次
排名:千里之外
原创:34篇
评论:20条
(1)(2)(1)(1)(8)(1)(1)(1)(1)(2)(3)(1)(2)(2)(8)打汽球游戏flash as3.0 源代码 - Flash - 移动开发 - 码农网(全站资源免积分下载)
打汽球游戏flash as3.0 源代码
打汽球游戏flash as3.0 源代码(rar文件,225.10KB,免1积分)
赞助商链接
下载信息载入中...&&&&&&
请输入验证码:
下载说明:
1、推荐使用WinRAR v3.10 以上版本解压本站资源。
2、本站上所有资源均为网友收集上传。本站所有资源仅供学习和研究使用,不得用于任何商业用途。如有需要请购买正版。如有侵犯你版权的,请给我们发邮件,本站将立即改正。
3、下载本站资源时,如果服务器暂不能下载请过一段时间重试!
4、本站和网警密切配合,对发布违法资源零容忍。
as3代码rar文件225.10KBFlash,AS3.0,,打地鼠rar文件398KBFlash,,as3.0zip文件111KBflash,3.0,飞机,射击游戏rar文件3.77MBflash,actionscript,小猪快跑rar文件203KBflash,as3.0,游戏编程,源码zip文件344KBflash,游戏rar文件1.23MB游戏rar文件815KBflash,as3.0,空战游戏源码zip文件10.31MBflash,as,游戏制作,方法及代码doc文件230KBflash as3实现打字小游戏代码-牛宝宝文章网
flash as3实现打字小游戏代码
游戏效果新建Fla,在第一帧F9添加代码即可。代码如下var
arr:Array = new Array();var time:uint=0;var angle:Number=0;[SWF(width=800, height=465,backgroundColor=0xffffff,
frameRate=24)]this.addEventListener(Event.ENTER_FRAME,function(event){time++;angle+=0.1;if(time&=13){var tf:TextField = addChild(new TextField()) as
TextFzfun = function(){time = 0,tf.htmlText ='&font
size=&'+String(Math.round(Math.random()*35)+15)+'&
color='+String(Math.random()*)+'&&'+
String.fromCharCode(int(Math.random()*26+65).toString())+'&/font&',tf.x =
Math.random()*-760+780,tf.y = -10,tf.name =
(Math.random()*-10+5).toString(),arr.unshift(tf)}.apply();}for(var i:Number =
arr.length-1;i&=0;i--){zfun =function(){arr[i].y+=3,arr[i].x+=
Math.sin(angle)*int(arr[i].name)}.apply();if(arr[i].y&=stage.stageHeight){zfun
=function(){removeChild(arr[i]),arr.splice(i,1)}.apply();}}});stage.addEventListener(KeyboardEvent.KEY_DOWN,function(event){for(var i:Number =
arr.length-1;i&=0;i--){if(arr[i].text==String.fromCharCode(event.keyCode)){zfun =function(){removeChild(arr[i]),arr.splice(i,1)}.apply();}}});欢迎您转载分享:
更多精彩: