今天 继续做 上星期的实验,在家里写的程序一般很懒惰去用高级一点第三方类,很多事情就想用一些原始办法去实现,往往发现时间效率跟不上去,这样去折磨自己。其实就想用写一点原始的东西,其他就没什么了。
今天这个程序只是加多一个额外参数,最初的目的只是想实现多圈翻转之后就进行缓冲慢下来的效果,目前这个办法去实现还不够理想,定下的参数还过于死板,下次抽点时间去改善这个玩意。
下面只是增加一个圈数参数,可以让图片翻转多少次后慢慢停下来。
基本想做的实验就是这种玩意,递减地旋转!看看下个星期想到其他办法去改进一下。今晚就到此为止了。
var data:Array = [new bitmapDataA(0,0),new bitmapDataB(0,0)];//准备两张位图
var effect:FilpEffect=new FilpEffect();
effect.x=250;
effect.y=200;
addChild(effect);
effect.fill(data[0],data[1]);
effect.addEventListener(MouseEvent.CLICK,onFilp);
function onFilp(event:MouseEvent):void
{
effect.rest();
effect.doEffect(5);
}
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.display.BitmapData;
import flash.display.Bitmap;
public class FilpEffect extends Sprite
{
private var data:Array = [];
public var speed:Number = 20;
private var isFilp:Boolean = false;
private var bitmap:Bitmap;
private var count:Number=0;
private var isComplete:Boolean = false;
private var turns:int;//圈数
private var currentTurns:int;//当前圈数
private var maxValue:int = 85;
private var isOver:Boolean = false;
private var isOver180:Boolean=false;
private var a:Number=0.1;
public function FilpEffect()
{
bitmap=new Bitmap();
addChild(bitmap);
}
//填充两个面的位图
public function fill(topBmpData:BitmapData,bottomBmpData:BitmapData):void
{
data.push(topBmpData,bottomBmpData);
bitmap.bitmapData = data[0];
bitmap.x = - bitmap.width / 2;
bitmap.y = - bitmap.height / 2;
}
//播放特效 ,圈数
public function doEffect(turns:int=1,rotaX:int=0):void
{
if (! isFilp)
{
addEventListener(Event.ENTER_FRAME,onFilp);
isFilp = true;
this.rotationX=rotaX;
this.turns = turns;//加入翻转的圈数
}
}
private function onFilp(event:Event):void
{
count +=speed;
speed-=a;
this.rotationY = count % 360;
if (! isOver && count > maxValue)
{
bitmap.bitmapData = (bitmap.bitmapData ==data[0]) ? data[1]:data[0] ;
this.scaleX = this.scaleX ==1?-1:1;
isOver = true;
maxValue = (maxValue == 265) ? 85:265;
}
if (! isComplete && isOver && count >265)
{
isOver = false;
isComplete = true;
}
if(count>=180 && !isOver180)
{
currentTurns++;
isOver180=true;
}
if (count>=360 )
{
isComplete = false;
count = 0;
isOver = false;
isOver180=false;
}
if (turns==currentTurns)
{
removeEventListener(Event.ENTER_FRAME,onFilp);
currentTurns = 0;
isFilp = false;
speed=20;
count = 0;
isComplete = false;
isOver = false;
isOver180=false;
maxValue=85;
}
}
//重设默认
public function rest():void
{
if (data[0])
{
bitmap.bitmapData = data[0];
this.scaleX = 1;
}
}
}
}