快速业务通道

一个完全使用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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号