您的位置:首页 > 其它

Flash 游戏设计笔记:鼠标类游戏(2)

2012-02-17 20:17 351 查看
Flash 游戏设计笔记:鼠标类游戏(1)

http://blog.csdn.net/hero82748274/archive/2009/02/11/3878304.aspx

继续上次的话题,我们做一个鼠标按下去的事件响应

一,鼠标点击事件

首先添加两个属性:

private var power:Number=0;

private var Maxpower:Number=100;

添加一个鼠标响应:

stage.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);

private function MouseDown(event:MouseEvent):void
{

power++;

trace(power);

}

这样我们的数据每当按一下就power的值就增加了,再按一下鼠标,power的值变为2. 继续下去,power的值就变成了n

但是我们要使power的数据在我们按下去的时候,让它能够产生数字自动增加,让其不断递增。

如下面的结果:

1

2

3

4

。。。

。。。。。

二、引入Event.ENTER_FRAME 事件在鼠标按下响应后

递增和递减的制作

问题:当鼠标按下去的时候,我们希望数据能够一直增加,当鼠标增加到一定值的时候他就会递减一个数据。假设我们设置一个变量为power 的number类型的,每一帧增加1 也就是power++,当power增加到一定值的时候,我们设置为if(power>n){} 响应递减函数。

private function adds():void
{
stage.addEventListener(Event.ENTER_FRAME,addnum);
}

行为:

private function addnum(event:Event):void
{
power++;
trace(power);
if (power >= 10)
{
stage.removeEventListener(Event.ENTER_FRAME,addnum);
degression2();
}
}

递减:

private function degression2():void
{
stage.addEventListener(Event.ENTER_FRAME,degression);
}
private function degression(event:Event):void
{
power--;
trace(power);
if (power == 0)
{
stage.removeEventListener(Event.ENTER_FRAME,degression);
adds();
}
}

进入MouseEvent事件.当鼠标按下的时候,那么就出现了递增。

private function MouseDown(event:MouseEvent):void
{
adds();
}

输出结果:

1
2
3
4
5
6
7
8
9
10
11
10
9
8
7
6
5

代码清单:

package
{
import flash.display.MovieClip;
import flash.events.*;
import flash.text.TextField;
import flash.ui.Mouse;
public class Example extends MovieClip
{
private var dx:TextField;
private var dy:TextField;
private var photo:MousePhoto;
private var power:Number=0;
private var Maxpower:Number=100;
//private var degression:Function;
//private var addnum:Function;
public function Example()
{
addEventListener(Event.ENTER_FRAME,Run);
stage.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP,Mouseup);
init();
// mouse.hide():
}
private function init():void
{
dx=new TextField ;
addChild(dx);
dx.width=50;
dx.height=20;
dx.x=30;
dx.y=30;
dx.border=true;
dy=new TextField ;
addChild(dy);
dy.width=50;
dy.height=20;
dy.x=30;
dy.y=53;
dy.border=true;
Mouse.hide();//隐藏鼠标
photo=new MousePhoto ;//创建代替鼠标的图
addChild(photo);
}
private function Run(event:Event):void
{
dx.text=String(mouseX);
dy.text=String(mouseY);
photo.x=mouseX;
photo.y=mouseY;
}
private function adds():void
{
stage.addEventListener(Event.ENTER_FRAME,addnum);
}
private function addnum(event:Event):void
{
power++;
trace(power);
if (power >= 10)
{
stage.removeEventListener(Event.ENTER_FRAME,addnum);
degression2();
}
}
private function degression2():void
{
stage.addEventListener(Event.ENTER_FRAME,degression);
}
private function degression(event:Event):void
{
power--;
trace(power);
if (power == 0)
{
stage.removeEventListener(Event.ENTER_FRAME,degression);
adds();
}
}
private function MouseDown(event:MouseEvent):void
{
adds();
}
private function Mouseup(event:MouseEvent):void
{
stage.removeEventListener(Event.ENTER_FRAME,degression);
stage.removeEventListener(Event.ENTER_FRAME,addnum);
}
}
}

三.递增递减改进--分段函数的应用

我们希望一个变量能够在某一个条件下程序递增的形势,然后当这个条件达到某一个界限值的时候,会呈现递减的态势 。

如图:

这样的图可以告诉我们一件事情,当某一个角度的时候,曲线是递增 ,当某一个角度的角度的时候,它就递减,

我们可以认为是两条曲线在不同的时间段里面产生运行

接下来我们要改造上面繁琐的编程,我们只需要一个Event事件就可以

做一小测试 :

package
{
import flash.display.MovieClip;
import flash.events.*;
public class Example2 extends MovieClip
{
private var power:int=0;
private var angle:int=-45;
public function Example2()
{
addEventListener(Event.ENTER_FRAME,Run);
}
private function Run(event:Event):void
{
if (power>=-1 )
{//angle=-45;
power+=Math.tan(angle*180/Math.PI);
trace(power);
if (power==10)
{
angle=-135;
}
if (power==0)
{
angle=-45;
}
}
}
}
}

到目前为止,我们已经初步建立一种递增递减的数据现象,这个只是我们的数据表现层而已。而数据层建立后,我们希望表现在UI上,按力感应就是我们其中的一个应用。

package
{
import flash.display.MovieClip;
import flash.events.*;
import flash.text.TextField;
import flash.ui.Mouse;
public class Example3 extends MovieClip
{
private var dx:TextField;
private var dy:TextField;
private var photo:MousePhoto;
private var power:int=0;
private var Maxpower:Number=100;
private var angle:int=-45;
public function Example3()
{
addEventListener(Event.ENTER_FRAME,Run);
stage.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP,Mouseup);
init();
}
private function init():void
{
dx=new TextField ;
addChild(dx);
dx.width=50;
dx.height=20;
dx.x=30;
dx.y=30;
dx.border=true;
dy=new TextField ;
addChild(dy);
dy.width=50;
dy.height=20;
dy.x=30;
dy.y=53;
dy.border=true;
Mouse.hide();//隐藏鼠标
photo=new MousePhoto ;//创建代替鼠标的图
addChild(photo);
}
private function Run(event:Event):void
{
dx.text=String(mouseX);
dy.text=String(mouseY);
photo.x=mouseX;
photo.y=mouseY;
}
private function adds():void
{
stage.addEventListener(Event.ENTER_FRAME,addnum);
}

private function addnum(event:Event):void
{
if (power>=-1 )
{//angle=-45;
power+=Math.tan(angle*180/Math.PI);
trace(power);
if (power==10)
{
angle=-135;
}
if (power==0)
{
angle=-45;
}
}
}

private function MouseDown(event:MouseEvent):void
{
adds();
}

private function Mouseup(event:MouseEvent):void
{
stage.removeEventListener(Event.ENTER_FRAME,addnum);
}

}
}


下面会说一下递增和递减曲线的一些应用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: