如题:早先天,因为接到任务,要写个数值显示效果。
于是,自己先用Flash cs编辑了一下动画,知道了参数后,再到AS3项目中,使用greenSock的TweenMax来实现即可。
转到AS3中,不到20分钟,即可写出来,只是Flash CS编辑动画的时候,比较需要耐心。
下载运行实例:游戏战斗显示数据效果
测试运行类:
package
{
import controlsEvents.NumericeUpDownEvent;
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.utils.getTimer;
[SWF(width="1200",height="720")]
/**
* 游戏战斗显示数据效果(双倍加血,暴击减血,普通加血,普通减血)
* @author Jave.Lin
*/
public class Main extends Sprite
{
private const LEFT:uint=37;
private const UP:uint=38;
private const RIGHT:uint=39;
private const DOWN:uint=40;
private var _doubleAddHp:DoubleAddHp;
private var _doubleSubHp:DoubleSubHp;
private var _addHp:AddHp;
private var _subHp:SubHp;
private var _instructionLabel:Label;
private var _instructionLabelSourceX:Number=0;
private var _instructionLabelSourceY:Number=0;
private var _doubleAddHpLabel:Label;
private var _doubleAddHpNumericUpDown:NumericUpDown;
private var _doubleSubHpLabel:Label;
private var _doubleSubHpNumericUpDown:NumericUpDown;
private var _addHpLabel:Label;
private var _addHpNumericUpDown:NumericUpDown;
private var _subHpLabel:Label;
private var _subHpNumericUpDown:NumericUpDown;
private var _shakeInterval:uint=1500;
private var _lastShakeTime:uint=0;
public function Main()
{
stage.color=0x888888;
stage.frameRate=60;
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.align=StageAlign.TOP_LEFT;
// var bmp:Bitmap=new Bitmap(new Number0(0,0));
// addChild(bmp);
_doubleAddHp=new DoubleAddHp(987654321);
addChild(_doubleAddHp);
_doubleAddHp.x=300;
_doubleAddHp.y=100;
_doubleSubHp=new DoubleSubHp(123456789);
addChild(_doubleSubHp);
_doubleSubHp.x=300;
_doubleSubHp.y=200;
_addHp=new AddHp(321654987);
addChild(_addHp);
_addHp.x=300;
_addHp.y=300;
_subHp=new SubHp(987654321);
addChild(_subHp);
_subHp.x=300;
_subHp.y=400;
_doubleAddHpLabel=new Label("双倍加血数值:");
addChild(_doubleAddHpLabel);
_doubleAddHpLabel.fontSize=15;
_doubleAddHpLabel.x=500;
_doubleAddHpLabel.y=100;
_doubleAddHpNumericUpDown=new NumericUpDown();
addChild(_doubleAddHpNumericUpDown);
_doubleAddHpNumericUpDown.minValue=0;
_doubleAddHpNumericUpDown.maxValue=999999999;
_doubleAddHpNumericUpDown.x=_doubleAddHpLabel.x+_doubleAddHpLabel.width;
_doubleAddHpNumericUpDown.y=_doubleAddHpLabel.y;
_doubleAddHpNumericUpDown.addEventListener(NumericeUpDownEvent.VALUE_CHANGED,onDoubleAddHpValueChanged);
_doubleSubHpLabel=new Label("暴击减血数值:");
addChild(_doubleSubHpLabel);
_doubleSubHpLabel.fontSize=15;
_doubleSubHpLabel.x=500;
_doubleSubHpLabel.y=200;
_doubleSubHpNumericUpDown=new NumericUpDown();
addChild(_doubleSubHpNumericUpDown);
_doubleSubHpNumericUpDown.minValue=0;
_doubleSubHpNumericUpDown.maxValue=999999999;
_doubleSubHpNumericUpDown.x=_doubleSubHpLabel.x+_doubleSubHpLabel.width;
_doubleSubHpNumericUpDown.y=_doubleSubHpLabel.y;
_doubleSubHpNumericUpDown.addEventListener(NumericeUpDownEvent.VALUE_CHANGED,onDoubleSubHpValueChanged);
_addHpLabel=new Label("普通加血数值:");
addChild(_addHpLabel);
_addHpLabel.fontSize=15;
_addHpLabel.x=500;
_addHpLabel.y=300;
_addHpNumericUpDown=new NumericUpDown();
addChild(_addHpNumericUpDown);
_addHpNumericUpDown.minValue=0;
_addHpNumericUpDown.maxValue=999999999;
_addHpNumericUpDown.x=_addHpLabel.x+_addHpLabel.width;
_addHpNumericUpDown.y=_addHpLabel.y;
_addHpNumericUpDown.addEventListener(NumericeUpDownEvent.VALUE_CHANGED,onAddHpValueChanged);
_subHpLabel=new Label("普通减血数值:");
addChild(_subHpLabel);
_subHpLabel.fontSize=15;
_subHpLabel.x=500;
_subHpLabel.y=400;
_subHpNumericUpDown=new NumericUpDown();
addChild(_subHpNumericUpDown);
_subHpNumericUpDown.minValue=0;
_subHpNumericUpDown.maxValue=999999999;
_subHpNumericUpDown.x=_subHpLabel.x+_subHpLabel.width;
_subHpNumericUpDown.y=_subHpLabel.y;
_subHpNumericUpDown.addEventListener(NumericeUpDownEvent.VALUE_CHANGED,onSubHpValueChanged);
_instructionLabel=new Label("按方向“左(双倍加血)、上(暴击减血)、右(普通加血)、下(普通减血)”可以查看效果");
addChild(_instructionLabel);
_instructionLabelSourceX=_instructionLabel.x=(1200-_instructionLabel.width)/2;
_instructionLabelSourceY=_instructionLabel.y=450;
_instructionLabel.fontSize=14;
_instructionLabel.fontColor=0xffff00;
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
stage.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function onEnterFrame(e:Event):void
{
if((getTimer()-_lastShakeTime)>_shakeInterval)
{
trace("shake on : ",getTimer());
trace("_instructionLabelSourceX,_instructionLabelSourceY : ",
_instructionLabelSourceX,_instructionLabelSourceY);
_lastShakeTime=getTimer();
Utils.shake(
_instructionLabel,
200,100,
Utils.RandomDirecitonShake,0,
_instructionLabelSourceX,_instructionLabelSourceY,
0,0);
}
}
private function onSubHpValueChanged(e:NumericeUpDownEvent):void
{
_subHp.v=e.value;
}
private function onAddHpValueChanged(e:NumericeUpDownEvent):void
{
_addHp.v=e.value;
}
private function onDoubleSubHpValueChanged(e:NumericeUpDownEvent):void
{
_doubleSubHp.v=e.value;
}
private function onDoubleAddHpValueChanged(e:NumericeUpDownEvent):void
{
_doubleAddHp.v=e.value;
}
private function onKeyDown(e:KeyboardEvent):void
{
switch(e.keyCode)
{
case LEFT:
{
_doubleAddHp.action();
break;
}
case UP:
{
_doubleSubHp.action();
break;
}
case RIGHT:
{
_addHp.action();
break;
}
case DOWN:
{
_subHp.action();
break;
}
default:
{
break;
}
}
}
}
}
运行效果图: