做了一个简单射击游戏,有人需要的话就贴出教程。
flash吧
全部回复
仅看楼主
level 9
8524567539515 楼主
一楼度娘。
2012年06月05日 14点06分 1
level 9
8524567539515 楼主
游戏效果图
2012年06月05日 14点06分 2
level 1
来吧 坐等教程
2012年06月05日 15点06分 3
level 9
8524567539515 楼主
啊哈,什么风把您吹来啦~~
2012年06月05日 15点06分 4
level 7
算我一个吧。
2012年06月05日 15点06分 5
level 9
8524567539515 楼主
绘制工作:
1.设置舞台大小800*600,准备五个元件——飞机,大炮,炮弹,爆炸动画,准星。将大炮元件放在舞台中央,静止状态为炮口朝上,实例名设置为“mc_DaPao”(好吧,我承认我忘了大炮的英文了),拖入准星元件到舞台,实例名“mc_ZhunXing”.
2.在舞台上绘制两个动态文本,内容分别为“游戏结束”和“分数:0”,为第一个文本框添加实例名“t_GameOver”,为第二个文本框添加实例名“t_Score”.
准备工作就到这里,下面是代码部分。
2012年06月05日 15点06分 7
level 9
8524567539515 楼主
代码部分明天再贴,要睡了……
2012年06月05日 15点06分 8
level 9
8524567539515 楼主
元件大致像这样,全部竖着绘制
2012年06月06日 03点06分 9
level 9
8524567539515 楼主
代码部分(1)
//首先点选文件>>新建>>Action Script文档,之后在里面输入代码
//以下代码是对大炮类的定义
package classes{
import flash.display.MovieClip;public class DaPao extends MovieClip{
public function DaPao():void{
//构造函数为空
}
public function Rot(mousex:int,mousey:int):void
//提供旋转大炮角度功能的函数,参数mousex和mousey用来传递鼠标的坐标
{
var centerX=this.x;
var centerY=this.y;
//获得大炮的坐标centerX和centerY var
R=Math.atan2(mousex-centerX,centerY-mousey);
//根据正切值获取弧度
this.rotationZ=R*180/Math.PI;
//rotationZ的单位为角度,但R为弧度,因此需要转化一下
}
}
}
//在游戏FLA的源文件目录下建立classes文件夹,再将上述Action Script文档
以“DaPao.as”命名保存在classes下
附图:旋转原理图示

2012年06月06日 03点06分 10
好贴
2013年07月27日 09点07分
level 9
8524567539515 楼主
代码部分(2)
//继续新建一个Action Script文档,在里面输入代码
//以下代码是对飞机类的定义
package classes
{
import flash.display.MovieClip;
public class Plane extends MovieClip
{
var m_Vx:Number;
var m_Vy:Number;
//m_Vx和m_Vy用来记录飞机x和y轴方向的分速度
public function Plane():void
{
this.visible=false;
//构造函数,首先让飞机被创建的时候是不可见的
}
public function Reset(ox:Number,oy:Number):void
//重置飞机属性的函数,需要提供两个参数ox和oy,分别为大炮的x,y坐标
{
var R=Math.random()*2*Math.PI;
//随机的弧度,决定飞机的入场位置和旋转角度
this.rotation=R*180/Math.PI;
//飞机的旋转角度
var sin:Number=Math.sin(R);
var cos:Number=Math.cos(R);
//sin和cos,记录该弧度R的正余弦值
this.x=ox-410*sin;
this.y=oy+410*cos;
//根据弧度确定位置
var speed:Number=Math.random()+1;
//随机获得1~2之间的任意速度
m_Vx=speed*sin;
m_Vy=-speed*cos;
//根据角度计算分速度
this.visible=true;
//显示飞机元件
}
public function Logic():void
//更新飞机位置的函数
{
if(this.visible==false)
return;
//如果对象不可见,就不必更新位置
this.x+=m_Vx;
this.y+=m_Vy;
//位置坐标加上速度等于最新位置
}
}
}
//将上述Action Script文档以“Plane.as”命名保存在classes下
附图:

2012年06月06日 03点06分 11
level 9
8524567539515 楼主
代码部分(3)
//新建一个Action Script文档
//以下代码是对炮弹类的定义
package classes
{
import flash.display.MovieClip;
public class Missile extends MovieClip
//炮弹类与飞机类有很多相似之处,有些地方就不作说明了
{
var m_Vx:Number;
var m_Vy:Number;
public function Missile():void
{
this.visible=false;
}
public function Reset(ox:int,oy:int,rot:int):void
//这里需要三个参数,与飞机相比多了一个旋转角度,飞机的角度是随机生成的,而炮弹需
要根据大炮的角度调整自身角度
{
var R:Number=rot*Math.PI/180;
var sin:Number=Math.sin(R);
var cos:Number=Math.cos(R);
m_Vx=15*sin;
m_Vy=-15*cos;
this.x=ox+40*sin;
this.y=oy-40*cos;
//因为要考虑炮筒的长度,所以炮弹被创建在以大炮旋转点为中心半径为40的圆上
this.rotationZ=rot;
this.visible=true;
}
public function Logic():void
{
if(this.visible==false)
return;
this.x+=m_Vx;
this.y+=m_Vy;
if (this.x>810||this.x<-10||this.y>810||this.y<-10)
this.visible=false;
//此处加入了超出边界即销毁的代码,以免连发不中而导致没有炮弹
}
}
}
//将上述Action Script文档以“Missile.as”命名保存在classes下
2012年06月06日 03点06分 12
level 9
8524567539515 楼主
代码部分(4)
//新建一个Action Script文档
//以下代码是对爆炸动画类的定义
package classes{
import flash.display.MovieClip;
public class Explosion extends MovieClip {
public function Explosion() {
this.visible=false;
this.stop();
//起初让动画停止
}
public function Reset(ox:int,oy:int) {
//此函数让动画在坐标(ox,oy)处停留在第一帧
this.x=ox;
this.y=oy;
this.visible=true;
this.gotoAndStop(1);
}
public function Logic():void {
//用来更新动画帧数,注意用此套代码已经完全不需要在元件里额外加入代码了
if (this.visible==false) {
return;
}
if (this.currentFrame>=this.totalFrames) {
//currentFrame为当前帧,totalFrame为总帧数,当当前帧大于等于总帧数,设置不可见,
停止
this.visible=false;
this.stop();
}
nextFrame();
//播放下一帧
}
}
}
//将上述Action Script文档以“Explosion.as”命名保存在classes下
2012年06月06日 03点06分 13
level 9
8524567539515 楼主
plane.Reset(mc_DaPao.x,mc_DaPao.y);
}
for each (var missile in arr_Missile) {
//此函数与下一条函数的功能和上面的for each功能相同
missile.Logic();
}
for each (var explosion in arr_Explosion) {
explosion.Logic();
}
checkCollides();
//碰撞检测函数
}
public function checkCollides():void {
//函数功能:1.检测飞机与大炮之间的碰撞2.检测飞机与炮弹之间的碰撞
for each (var plane in arr_Plane) {
//遍历盛放Plane的数组
if (plane.visible==false) {
//如果当前示例不可见,就直接跳过下面的代码,让plane指向下一个实例
continue;
}
if (mc_DaPao.hitTestPoint(plane.x,plane.y,true))
{
//检测大炮是否与当前飞机坐标碰撞
//元件和点的碰撞检测hitTestPoint(x,y,boolean)三个参数,分别是点的x坐标,y坐
标和检测标准(true:检测元件的实际像素,较精确;false:检测元件的长方形边框,反
应速度快)
t_GameOver.visible=true;
//显示游戏结束
break;
}
for each (var missile in arr_Missile) {
//遍历炮弹数组
if (missile.visible==false) {
continue;
}
if (plane.hitTestPoint
(missile.x,missile.y,true)) {
//如果当前飞机与当前炮弹碰撞,则调用createExplosion函数生成爆炸动画
createExplosion
(missile.x,missile.y);
missile.visible=false;
plane.visible=false;
score+=1;
t_Score.text="分数:"+String
(score);
//当前炮弹,飞机全部设置成不可见,分数加1,并显示在动态文本上
}
}
}
}
public function createExplosion(ox:int,oy:int)
{
for each (var explosion in arr_Explosion) {
//检测爆炸数组中未使用的动画
if(explosion.visible==false){
Bang.play();
explosion.Reset(ox,oy)
break;
//播放爆炸声音,爆炸动画重置,跳出
}
}
}
public function OnMouseDown(e:MouseEvent):void {
//函数功能:用于在点击鼠标的时候创建炮弹
if (t_GameOver.visible==true) {
return;
}
for each (var missile in arr_Missile) {
//遍历炮弹数组,选用未被使用的炮弹实例
if (missile.visible==false) {
Shoot.play();
missile.Reset
(mc_DaPao.x,mc_DaPao.y,mc_DaPao.rotationZ);
//播放开炮的声音,放置炮弹
break;
}
}
}
public function OnMouseMove(e:MouseEvent):void {
//函数功能:令大炮跟随鼠标旋转
if (t_GameOver.visible==true) {
return;
}
mc_DaPao.Rot(this.stage.mouseX,this.stage.mouseY);
//直接调用预先定义的Rot函数改变大炮旋转方向,传递鼠标的位置
}
}
}
//将上述Action Script文档以“MyStage.as”命名保存在classes下
2012年06月06日 03点06分 15
level 9
8524567539515 楼主
第三步 链接
1.点击舞台的空白处,在属性栏中找到“类”这个选项,填入“classes.MyStage”
2.在库中选择大炮元件,右键-属性,勾选“为Actionscript导出”并在类中输
入“classes.DaPao”。爆炸动画、炮弹、飞机元件也照此法和相应的类关联上,最后测试
影片,修改错误。
游戏到此制作结束。
附图:

2012年06月06日 03点06分 16
flash8.0也可以吗[滑稽]
2016年08月25日 08点08分
level 4
太难了 我一点也看不懂
2012年06月06日 08点06分 17
level 9
给力 这种帖子最支持
2012年06月06日 09点06分 18
level 9
8524567539515 楼主
慢慢来,切忌好高骛远,建议先买本flash游戏制作的书。自己学做游戏的初期,不求华丽只求精辟,一定一定要在看完之后就动手实践,否则很快就忘了。贴下我看的两本书,提前声明,仅仅是个人推荐:
第一本适合小白初学时用,学得差不多了再看第二本,第一本里有很多基础性得东西做铺垫,第二本是教材,有老师指导的话可能会容易些,但咱是自学,一开始肯定接受不了他这种开门见山式的讲法。

2012年06月06日 09点06分 19
你们真觉得AS3更好么...
2013年01月08日 13点01分
哥哥威武啊
2013年01月09日 18点01分
level 9
8524567539515 楼主
多谢吧主抬举~
2012年06月06日 09点06分 20
level 2
给力! 当我师傅吧 我要学啊!!!!!![顶]
2012年06月07日 09点06分 21
1 2 3 4 5 6 尾页