11.7.运用动画技术

问题
我想把这章里的动画技术应用到对象的运动上
解决办法
运用这些技术,把结果赋值给对象的x和y属性
讨论
虽然改变对象的位置有各种各样的方法,大多数这章讨论的方法都可以被应用到一个电影剪辑或sprite的任何属性上。

首先尝试应用速率到对象的rotation属性上,变量名为_vr:
+展开
-ActionScript
package {
import flash.display.Sprite;
import flash.events.Event;
public class AnimatingRotation extends Sprite {
private var _sprite:Sprite;
private var _vr:Number = 4;
public function AS3CB( ) {
_sprite = new Sprite( );
_sprite.graphics.beginFill(0xffffff, 100);
_sprite.graphics.drawRect(-50, -20, 100, 40);
_sprite.graphics.endFill( );
_sprite.x = 100;
_sprite.y = 100;
addChild(_sprite);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(event:Event):void {
_sprite.rotation += _vr;
}
}
}

我们看到一个矩形在做旋转运动,每帧sprite的rotation增加4。

下面的例子应用弹簧原理缩放sprite。click处理函数产生随即的缩放值,enterFrame函数做弹簧运动,点击sprite会产生新的大小:
+展开
-ActionScript
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class AnimatingProperties extends Sprite {
private var _sprite:Sprite;
private var _k:Number = 0.1;
private var _damp:Number = 0.9;
private var _scaleVel:Number = 0;
private var _targetScale:Number = 1;
public function AS3CB( ) {
_sprite = new Sprite( );
_sprite.graphics.beginFill(0xffffff, 100);
_sprite.graphics.drawRect(-50, -50, 100, 100);
_sprite.graphics.endFill( );
_sprite.x = 100;
_sprite.y = 100;
addChild(_sprite);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
_sprite.addEventListener(MouseEvent.CLICK, onClick)
}
public function onEnterFrame(event:Event):void {
_scaleVel += (_targetScale - _sprite.scaleX) * _k
_sprite.scaleX += _scaleVel;
_sprite.scaleY = _sprite.scaleX;
_scaleVel *= _damp;
}
public function onClick(event:MouseEvent):void {
_targetScale = Math.random( ) * 2 - .5;
}
}
}

下面的例子设置了两组颜色值:_red1, _green1, _blue1, 和_red2, _green2, _blue2。每个值都在0.0到1.0之间。在enterFrame处理函数中用这些值设置color transform 对象并应用到sprite上:
+展开
-ActionScript
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
public class AnimatingColor extends Sprite {
private var _sprite:Sprite;
private var _red1:Number = 1;
private var _green1:Number = 0;
private var _blue1:Number = 0;
private var _red2:Number = 0;
private var _green2:Number = .5;
private var _blue2:Number = 1;
private var _easingSpeed:Number = 0.05;
public function AS3CB( ) {
_sprite = new Sprite( );
_sprite.graphics.beginFill(0xffffff, 100);
_sprite.graphics.drawRect(-50, -50, 100, 100);
_sprite.graphics.endFill( );
_sprite.x = 100;
_sprite.y = 100;
addChild(_sprite);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
addEventListener(MouseEvent.CLICK, onClick);
}
public function onEnterFrame(event:Event):void {
_red1 += (_red2 - _red1) * _easingSpeed;
_green1 += (_green2 - _green1) * _easingSpeed;
_blue1 += (_blue2 - _blue1) * _easingSpeed;
_sprite.transform.colorTransform =
new ColorTransform(_red1, _green1, _blue1);
}
public function onClick(event:MouseEvent):void {
_red2 = Math.random( );
_green2 = Math.random( );
_blue2 = Math.random( );
}
}
}

加支付宝好友偷能量挖...


评论(0)网络
阅读(110)喜欢(0)flash/flex/fcs/AIR