您的位置:首页 > 其它

flash 游戏设计笔记:坚持几秒

2011-04-21 10:51 459 查看


昨晚玩了一个这样的小游戏,感觉很有意思。于是尝试写一个来写一下。最近心情老是漂浮不定,可能老了,面对现实的残酷,其实不想找太多借口,一个网友说的很对,我需要反省一下,很多事情不是活在理想的国度。但是有一些事情还是必须保持一种状态,这个是起码每天都是要坚持的事情。

以后不再找借口,给自己找理由。



下面不作解析;

package
{
import flash.display.Sprite;
import flash.events.*;
import flash.utils.*;
import flash.display.*;
import flash.external.ExternalInterface;
import flash.text.*;

public class Main extends Sprite
{
private var gameObjectList:Array=[];//游戏对象
private var boxList:Array=[];//矩形数组
private var wallList:Array=[];//墙数组
private var player:Player;//玩家
private var startTime:int;//开始时间
private var speed:Number=5.0;//初始化速度
private var timerMsg:TextField;//时间显示
public function Main()
{
if (stage)
{
onInit();
}
else
{
addEventListener(Event.ADDED_TO_STAGE,onInit);
}
}
private function onInit(event:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE,onInit);

creatSprite();
timerMsg=new TextField();
addChild(timerMsg);
timerMsg.textColor=0xffffff;
timerMsg.x=20;
timerMsg.y=10;

player=new Player(50,50,0xff0000);
player.addEventListener("gameStart",startGame);
addChild(player);
player.x=stage.stageWidth/2;
player.y=stage.stageHeight/2;
}

private function startGame(event:Event):void
{
startTime=getTimer();
player.removeEventListener("gameStart",startGame);
addEventListener(Event.ENTER_FRAME,gameLoop);
}

private function gameLoop(event:Event):void
{
showTime();

//进行运动
for (var i:int=0; i<4; i++)
{
var rect:RectBox=boxList[i];
rect.vx=Math.cos(rect.angle)*speed;
rect.vy=Math.sin(rect.angle)*speed;

rect.x+=rect.vx*rect.diretionX;
rect.y+=rect.vy*rect.diretionY;

if(rect.hitTestObject(wallList[0]))
{
rect.diretionY=rect.diretionY*(-1);
}

if(rect.hitTestObject(wallList[1]))
{
rect.diretionY=rect.diretionY*(-1);
}
if(rect.hitTestObject(wallList[2]))
{
rect.diretionX=rect.diretionX*(-1);
}
if(rect.hitTestObject(wallList[3]))
{
rect.diretionX=rect.diretionX*(-1);
}
}
//速度递增
speed+=0.01;
trace(speed);
checkCollision();
}
//创建图形
private function creatSprite():void
{

//创建墙
var up_wall:Wall=new Wall(stage.stageWidth,30,0x333333);

var down_wall:Wall=new Wall(stage.stageWidth,30,0x333333);
down_wall.y=stage.stageHeight-30;

var left_wall:Wall=new Wall(30,stage.stageHeight,0x333333);

var right_wall:Wall=new Wall(30,stage.stageHeight,0x333333);
right_wall.x=stage.stageWidth-30;

addChild(up_wall);
addChild(down_wall);
addChild(left_wall);
addChild(right_wall);
wallList.push(up_wall,down_wall,left_wall,right_wall);

//创建运动的矩形
var rectA:RectBox=new RectBox(100,60,0x0000ff);
addChild(rectA);
rectA.x=100;
rectA.y=70;
rectA.angle=getAngle(rectA,stage.stageWidth/2,stage.stageHeight/2);

var rectB:RectBox=new RectBox(80,60,0x0000ff);
addChild(rectB);
rectB.x=450;
rectB.y=70;
rectB.angle=getAngle(rectB,stage.stageWidth/2,stage.stageHeight/2);

var rectC:RectBox=new RectBox(100,40,0x0000ff);
addChild(rectC);
rectC.x=100;
rectC.y=350;
rectC.angle=getAngle(rectC,stage.stageWidth/2,stage.stageHeight/2);

var rectD:RectBox=new RectBox(40,70,0x0000ff);
addChild(rectD);
rectD.x=450;
rectD.y=350;
rectD.angle=getAngle(rectD,stage.stageWidth/2,stage.stageHeight/2);

boxList.push(rectA,rectB,rectC,rectD);

gameObjectList.push(up_wall,down_wall,left_wall,right_wall,rectA,
rectB,
rectC,
rectD);

}
//检测碰撞
private function checkCollision():void
{
for (var i:int=0; i<gameObjectList.length; i++)
{
if (player.hitTestObject(gameObjectList[i]))
{
trace("碰撞了");
var endTime:int=getTimer();
var result:int=(endTime-startTime);
removeEventListener(Event.ENTER_FRAME,gameLoop);
showResult(result);
player.stop();
break;
}
}
}
//显示结果
private function showResult(value:int):void
{
var result:Number=value/1000;
ExternalInterface.call("alert","你坚持了:"+result+"秒");
}

private function showTime():void
{
var endTime:int=getTimer();
var result:int=(endTime-startTime);
timerMsg.text="你坚持了:"+result/1000+"秒";
}

//获取角度
private function getAngle(obj:RectBox,x:Number,y:Number):Number
{
return Math.atan2(y - obj.y,x - obj.x);
}
}
}


基础类

package
{
import flash.display.Sprite;
import flash.events.*;

public class GameObject extends Sprite
{
public function GameObject()
{

}

}
}


玩家

package
{
import flash.display.Sprite;
import flash.events.*;

public class Player extends GameObject
{
public function Player(width:Number,height:Number,color:uint)
{
this.graphics.beginFill(color);
this.graphics.drawRect(-width/2,-height/2,width,height);
this.graphics.endFill();
addEventListener(MouseEvent.MOUSE_DOWN,onStartMove);
addEventListener(MouseEvent.MOUSE_UP,ooStopMove);
}
private function onStartMove(event:MouseEvent):void
{
this.startDrag();
this.dispatchEvent(new Event("gameStart"));
}
private function ooStopMove(event:MouseEvent):void
{
this.stopDrag();
}

//停止
public function stop():void
{
this.stopDrag();
removeEventListener(MouseEvent.MOUSE_DOWN,onStartMove);
removeEventListener(MouseEvent.MOUSE_UP,ooStopMove);

}
}
}


四个矩形框

package
{
import flash.display.Sprite;
import flash.events.*;

public class RectBox extends GameObject
{
public var angle:Number;
public var diretionX:int=1;//方向
public var diretionY:int=1;//方向
public var vx:Number;
public var vy:Number;

public function RectBox(width:Number,height:Number,color:uint)
{
this.graphics.beginFill(color);
this.graphics.drawRect(-width/2,-height/2,width,height);
this.graphics.endFill();
}

}
}




package
{
import flash.display.Sprite;
import flash.events.*;
import flash.display.Shape;
public class Wall extends GameObject
{
public function Wall(width:Number,height:Number,color:uint)
{
this.graphics.beginFill(color);
this.graphics.drawRect(0,0,width,height);
this.graphics.endFill();

}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: