一个完全使用AS2编制的飞机游戏之制作详解
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-12
moveship方法 // 1. 检查按键 // 2. 分配变量dir就是在每按下键一次,把dir传给spaceship.move方法 function moveShip(dir:String){ ship.move(dir); } 编译后并得到了错误。。。 " 行 38: 没有''move''方法." 太棒了,开始得到错误了,(译者注,我再倒),那正是所期待着的要发生的事。 现在写下ship.move方法来清除错误。。。 那就是“测试优先”的想法(作者这样写:主要是这里做的是个小东东,而且主要目的 在于尝试AS2编程,至于诸位自己做项目的时候,用什么模式,还请自己拿捏准哟.) 把方法在一系列的测试中实施直到它们出了问题,然后编写方法直到它符合要求接着移向下一个方法。 我使得飞船移动,这里就是我如何做的。。。 class Game{ //声明变量 var ship:Spaceship; var enemyArray:Array; var laserArray:Array; var dir:String; // ==== 构造函数 ============== function Game(_ship:Spaceship, _enArray:Array, _bullArray:Array){ ship = _ship; enemyArray = _enArray; laserArray = _bullArray; } // ==== 检查按键的方法 ======= function checkKey():String{ if(Key.isDown(Key.RIGHT)){ dir = "right"; } else if(Key.isDown(Key.LEFT)){ dir = "left"; } else if(Key.isDown(Key.UP)){ dir = "up"; } else if(Key.isDown(Key.DOWN)){ dir = "down"; } else dir="stop"; //下面这个起作用了 //trace(dir + " - in game.checkey"); return dir; } // === 移动飞船的方法 ===== // 1.检查按键 // 2.分配给变量dir相应的方向 // 3 把变量dir的值传进spaceship.move方法中 function moveShip(dir:String){ ship.move(checkKey()); } } //game类结束 在宇宙飞船类中: class Spaceship extends MovieClip{ var dir:String; function move(_dir:String){ dir = _dir; if(dir=="left") _x -= 20; if(dir=="right")_x += 20; if(dir=="up") _y -= 20; if(dir=="down") _y += 20; if(dir=="stop"){ _x +=0; _y +=0; } } } //Spaceship类结束 我在把变量dir传进ship.move方法时没有遇到任何麻烦,然后我尝试试着直接使用checkKey方法,因为它总是返回dir,当然,这个起效了。 然后我不得不加一个stop在其中...无论何时当键按起的时候,飞船的运动有一些可笑,这样的状态一直持继着,直到我在后来能把运动变得平缓为止... 但是我知道我的设计起效了。 我仅仅要作是只是把宇宙飞船(SPACESHIP)的实例传给游戏类的构造函数中。 然后,哈哈,presto(类例于芝麻开门之类的话)...接下来是什么呢?嗯,或许是发射镭射子弹吧。。。好的,让我们走。 发射雷射子弹 这个花了我两天的时间,我几乎不能相信。我持续着错误的子弹发射。。。这里是我发射镭射子弹方法的第一次尝试。 // 在game类中: // ====== 发射镭射子弹 ======== function fireLaser_old(){ if(Key.isDown(Key.SPACE)){ // set start pt of laser laserArray[bulletNum]._y = ship.getY(); laserArray[bulletNum]._x = ship.getX(); // if space bar pressed set flag hasFired = true; bulletNum++; if(bulletNum >=5){ bulletNum = 0; } } } 上面的代码已相当接近我最后结束时的状态,最实际的问题是在于movelaser方法。 噢哈哈,我把镭射子弹发射放在了我的FLA中的EnterFrame循环中了...大大的错误... 这必须放在FLA文件的onKeyDown事件中。这就是目前为止的状况 ://在fla文件的actions面板中 attachMovie("ship_mc", "myShip", getNextHighestDepth()); var enArray = new Array(3); var bulletArray = new Array(5); //连接bullet数组 for(var i =0;i < 5;i++){ attachMovie("laser_mc", "laser"+i, 100 + i); bulletArray[i] = _root["laser"+i]; } // 声明并初始化游戏类的实体 // |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: flash2004伪3D组件教学及下载下一篇: 调用外部swf定位的问题
关于一个完全使用AS2编制的飞机游戏之制作详解的所有评论