[AS2.0]gameVirtual3D v0.1

*伪3D空间射击游戏
*swf演示上传至http://www.swfcabin.com/
演示:http://www.swfcabin.com/open/1314079090
e69caae6a087e9a298-3

更新记录

v0.1 20110823
#上个月为了推广游戏花2天半搞的一个,算是第一次接触伪3D,自己想的公式,所以玩起来还会有些奇怪现象(有些敌机越追越近,有些则越远)。当时只用过一次就不用了,现在觉得扔了浪费,就先上传当一个小项目,不知未来能进化到什么程度…其实是想做成伪3D空间引擎,并不是away3d那样,而是更倾向于易用和展现。
#上传 & 共享。

待处理
@优化代码,模块化。
@容易找不到最后一架敌机。
@相对移动速度有错误。
@敌机坐标可显示(雷达)
@攻击时射击轨迹计算(远近规律、移动中抛物线规律)
@副武器可用。
@敌人会进行攻击。
@空间角度及距离计算要精确。
@使用AS3编写,学习Point3D类。
@流畅度优先
@游戏基本说明
@生命槽,不知道怎么死
@鼠标的上移和你的飞行速度挂钩
@连击系统,你在一定时间内 连续的击破敌机可以获得比单独击破一架获得更高的分数
@积分系统,用这些积分 还可以变成游戏中的金钱 购买和升级武器,飞机的生命槽 推进器 武器威力 装填时间 冷却时间,都会消耗大量的积分.
@购买武器

源代码

_root

//允许跨域调用,重要
System.security.allowDomain("*");

var stageWidth = Stage.width;
var stageHeight = Stage.height;
//战机初始
aircraft._x = stageWidth/2;
aircraft._y = stageHeight-stageHeight/5;
//战机Y坐标
var aircraftY = aircraft._y;
var aircraftX = aircraft._x;

crosshair.crosshairHold._alpha=0;//光标锁定隐藏
//图表初始
enemyNum=8;//敌机数
youKilled = enemyNum;
youRoute = 0;
youSpeed = 0;

var taskStatus=false;//任务状态
var taskStatusHold=true;//状态锁定
var quickOpen =false;
//深度
aircraft.swapDepths(999);
faceShell.swapDepths(1000);
crosshair.swapDepths(998);

var firstWeaponPowerRun=30;//能量消耗量

//副武器图标
for (var j = 0; j<6; j++) {
	weaponIcon.duplicateMovieClip("weaponIcon_s"+j, j*10+1);
	var weaponIcon_s:MovieClip = eval("weaponIcon_s"+j);
	weaponIcon_s._x = j*15+695;
	weaponIcon_s._y = 470;
}
//敌机图标
for (var i = 1; i<enemyNum; i++) {
	enemy_s0.duplicateMovieClip("enemy_s"+i,enemy_s0.getDepth()-i);
	var enemy_s:MovieClip = eval("enemy_s"+i);
	enemy_s._x = random(1000);
	enemy_s._y = random(560);
}
this.onEnterFrame = function() {

	//准心
	crosshair._x = _xmouse;
	crosshair._y = _ymouse;

	//准心反应效果
	//战机角度&喷射
	if (_xmouse>stageWidth/2+50) {
		aircraft._rotation = (_xmouse-stageWidth/2)/10;
	} else {
		aircraft._rotation = -(stageWidth/2-_xmouse)/10;
	}
	aircraft.rightPower._alpha = 110-_xmouse/10;
	aircraft.leftPower._alpha = _xmouse/10+20;
	if (_ymouse>stageHeight/2) {
		aircraft._y = aircraftY+(_ymouse-stageHeight/2)/10;
	} else {
		aircraft._y = aircraftY-(stageHeight/2-_ymouse)/10;
	}
	aircraft.MidPower._alpha = 56-_ymouse/10;
	aircraft._height = _xmouse/200+200;
	//攻击线效果

	//主武器能量恢复
	if (taskStatusHold){
	if(faceShell.firstWeaponPower._width<150){
		faceShell.firstWeaponPower._width+=1;
	}
	if (faceShell.firstWeaponPower._width<=firstWeaponPowerRun){
		faceShell.firstWeaponPower._alpha=50;
	}else{
		faceShell.firstWeaponPower._alpha=100;
	}
	}

};
//背景反方向移动
bg.onEnterFrame = function() {

	speedX = 0;
	speedY = 0;
	if (_xmouse>=0 && _xmouse<500) {
		speedX = -(_xmouse-500)/30;
		bg._x = bg._x+speedX;
		if (this._x>0) {
			this._x = -1000;
		}
	}
	if (_xmouse>500 && _xmouse<1000) {
		speedX = -(_xmouse-500)/30;
		bg._x = bg._x+speedX;
		if (this._x<-1000) {
			this._x = 0;
			//右侧超出部分
		}
	}
	if (_ymouse>=0 && _ymouse<400) {
		speedY = -(_ymouse-400)/30;
		bg._y = bg._y+speedY;
		if (this._y>0) {
			this._y = -560;
		}
	}
	//追赶enemy
	enemyAction(enemy_s0, speedX, speedY);
	enemyAction(enemy_s1, speedX, speedY);
	enemyAction(enemy_s2, speedX, speedY);
	//图标
	if (speedX<0) {
		speedX = speedX*-1;
	}

	youRoute = youRoute+Math.round(speedX+speedY);
	youSpeed = Math.round(speedX+speedY);
};
//星球反方向移动
star1.onEnterFrame = function() {
	if (_xmouse>=0 && _xmouse<500) {
		speedX = -(_xmouse-500)/30;
		star1._x = star1._x+speedX;
		if (this._x>1312) {
			this._x = -312;
		}
	}
	if (_xmouse>500 && _xmouse<1000) {
		speedX = -(_xmouse-500)/30;
		star1._x = star1._x+speedX;
		if (this._x<-312) {
			this._x = 1312;
			//右侧超出部分
		}
	}
	if (_ymouse>=0 && _ymouse<400) {
		speedY = -(_ymouse-400)/30;
		star1._y = star1._y+speedY;
		if (this._y>560+298) {
			this._y = -1000;
		}
	}
};
function enemyAction(funcName, speedX, speedY) {
	funcName._x += speedX;
	if (funcName._x>1100) {
		funcName._x = -500;
	}
	funcName._y += speedY;
	if (funcName._y>660) {
		funcName._y = -500;
	}
}

bg 背景

on(release){
	_parent.taskStatusHold = false;
	_parent.quickOpen=true;
}

bgUnit 背景单元

//背景复制2x4
for (var i = 0; i<2; i++) {//y
	for (var j = 0; j<4; j++) {//x
  		bgUnit.duplicateMovieClip("bgUnit_"+i+"_"+j,i*1+j*2);
		var bgUnit_:MovieClip= eval("bgUnit_"+i+"_"+j);
		bgUnit_._x=j*500;
		bgUnit_._y=i*560;
	}
}

enemy_s0 敌机

on (rollOver) {
	_parent.crosshair.crosshairNum = this._name+"\n x:"+this._x+" y:"+this._y;
	_parent.crosshair.crosshairHold._alpha = 100;

	if (_parent.faceShell.firstWeaponPower._width<_parent.firstWeaponPowerRun && _parent.taskStatusHold == true) {
		_parent.taskStatus = false;
		_parent.taskStatusHold = false;
		_parent.taskBody.gotoAndPlay(2);
	} else {
		if (_parent.taskStatusHold){
		_parent.faceShell.firstWeaponPower._width -= _parent.firstWeaponPowerRun;
		this.gotoAndPlay(2);
		_parent.youKilled -= 1;
		}
		//this._alpha = 0;

		//完成
		if (_parent.youKilled<=_parent.enemyNum-8 && _parent.taskStatusHold == true) {
			_parent.taskStatus = true;
			_parent.taskStatusHold = false;
			_parent.taskBody.gotoAndPlay(2);
		}
	}
}
on (rollOut) {
	_parent.crosshair.crosshairNum = "";
	_parent.crosshair.crosshairHold._alpha = 0;
}
on (release) {
	_parent.taskStatusHold = false;
	_parent.quickOpen=true;
}
onClipEvent (load) {
	cNum = 1;
	//越高越抖
	s =10;
	//速度
}
onClipEvent (enterFrame) {
	my_x = _x;
	my_y = _y;
	my_theta = _rotation;
	delta_dir = random(2);
	if (delta_dir == 0) {
		delta_dir = -1;
	}
	delta = cNum*delta_dir;
	my_theta = my_theta+delta;
	my_theta_rad = my_theta*3.141593/180;
	new_x = my_x+s*Math.cos(my_theta_rad);
	new_y = my_y+s*Math.sin(my_theta_rad);
	_rotation = my_theta;
	if (new_x>-100 && new_x<1100) {
		_x = new_x;
	} else {
		my_theta = 180-my_theta;
	}
	if (new_y>-100 && new_y<660) {
		_y = new_y;
	} else {
		my_theta = -my_theta;
	}
	_rotation = my_theta;
}

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据