我们已经知道如何设置帧速和场景的大小,我们想在场景中让某些东东动起来。以前,我们可以使用onEnterFrame作用在MovieClip上来达到目的,在AS3.0中,情况发生了变化。就跟我们以前提到的如何用addEventListener激活鼠标事件一样,我们现在只需知道事件的具体名称就可以了。EventType有一个静态成员ENTER_FRAME,这就是我们所需要的。
下面这个例子将创建十个圆并让它们在场景中运动起来。
package {
// use
// -default-size 800 800 -default-frame-rate 31
// as the additional compiler arguments
import flash.events.Event;
import flash.events.EventType;
import flash.display.Sprite;
public class Test extends Sprite {
public function Test() {
var minSize:Number = 10;
var maxSize:Number = 50;
var minSpeed:Number = 20;
var maxSpeed:Number = 50;
for( var i:int=0; i<10; i++){
var mc:MovingCircle = new MovingCircle(
getRandom( minSize, maxSize),
getRandom( minSpeed, maxSpeed),
getRandom( minSpeed, maxSpeed));
addChild( mc);
}
}
private function getRandom( minVal:Number, maxVal:Number):Number{
return minVal + Math.random() * (maxVal - minVal);
}
}
private class MovingCircle extends Sprite
{
private var xSpeed:Number;
private var ySpeed:Number;
public function MovingCircle( size:Number, xSpeed:Number, ySpeed:Number){
this.xSpeed = xSpeed;
this.ySpeed = ySpeed;
createUI( size);
addEventListener(EventType.ENTER_FRAME, onEnterFrame);
}
private function createUI( size:Number){
graphics.beginFill(Math.floor(Math.random() * 0xffffff));
graphics.drawCircle(-size/2, -size/2, size);
graphics.endFill();
}
private function onEnterFrame( evt:Event):Void{
x += xSpeed;
y += ySpeed;
if( x < 0){
x = Math.abs(x);
xSpeed *= -1;
} else if( x > stage.stageWidth){
x = stage.stageWidth - (x - stage.stageWidth);
xSpeed *= -1;
}
if( y < 0){
y = Math.abs(y);
ySpeed *= -1;
} else if( y > stage.stageHeight){
y = stage.stageHeight - (y - stage.stageHeight);
ySpeed *= -1;
}
}
}
}
既然我们不想让这些圆运动到场景以外,我们只要用场景的尺寸加以限制就可以了。从stage的属性中我们可以获取它的大小,并不需要另外建立一个常量。
下面这个例子将创建十个圆并让它们在场景中运动起来。
package {
// use
// -default-size 800 800 -default-frame-rate 31
// as the additional compiler arguments
import flash.events.Event;
import flash.events.EventType;
import flash.display.Sprite;
public class Test extends Sprite {
public function Test() {
var minSize:Number = 10;
var maxSize:Number = 50;
var minSpeed:Number = 20;
var maxSpeed:Number = 50;
for( var i:int=0; i<10; i++){
var mc:MovingCircle = new MovingCircle(
getRandom( minSize, maxSize),
getRandom( minSpeed, maxSpeed),
getRandom( minSpeed, maxSpeed));
addChild( mc);
}
}
private function getRandom( minVal:Number, maxVal:Number):Number{
return minVal + Math.random() * (maxVal - minVal);
}
}
private class MovingCircle extends Sprite
{
private var xSpeed:Number;
private var ySpeed:Number;
public function MovingCircle( size:Number, xSpeed:Number, ySpeed:Number){
this.xSpeed = xSpeed;
this.ySpeed = ySpeed;
createUI( size);
addEventListener(EventType.ENTER_FRAME, onEnterFrame);
}
private function createUI( size:Number){
graphics.beginFill(Math.floor(Math.random() * 0xffffff));
graphics.drawCircle(-size/2, -size/2, size);
graphics.endFill();
}
private function onEnterFrame( evt:Event):Void{
x += xSpeed;
y += ySpeed;
if( x < 0){
x = Math.abs(x);
xSpeed *= -1;
} else if( x > stage.stageWidth){
x = stage.stageWidth - (x - stage.stageWidth);
xSpeed *= -1;
}
if( y < 0){
y = Math.abs(y);
ySpeed *= -1;
} else if( y > stage.stageHeight){
y = stage.stageHeight - (y - stage.stageHeight);
ySpeed *= -1;
}
}
}
}
既然我们不想让这些圆运动到场景以外,我们只要用场景的尺寸加以限制就可以了。从stage的属性中我们可以获取它的大小,并不需要另外建立一个常量。
回复Comments
作者:
{commentrecontent}