游动的鱼AS3

    xiaoxiao2021-03-25  142

    1、index主类

    package { import flash.display.MovieClip; import flash.display.Sprite; import be.nascom.flash.graphics.Rippler; import flash.events.Event; import flash.events.MouseEvent; public class index extends Sprite { public var bgmc: MovieClip private var _rippler: Rippler; private var fishNum: int = 1; public function index() { //舞台出现时的监听方法 this.addEventListener(Event.ADDED_TO_STAGE, initMethod); } private function initMethod(e: Event): void { stage.scaleMode = "noScale"; _rippler = new Rippler(bgmc, 40, 10); addfishs(); } private function addfishs(): void { var i: int = 0; var yu: fish5; while (i < fishNum) { yu = new fish5(_rippler); addChild(yu); i++; } } } }  

    2、鱼类Class

    package { import flash.display.*; import flash.events.*; import flash.geom.*; import be.nascom.flash.graphics.Rippler; /** */ dynamic public class fish5 extends MovieClip { public var IsTouch:Boolean; public var targetX:Number; public var targetY:Number; private var linePt:Point;//jjw++ //mc... public var head:MovieClip;//头部 public var link0:MovieClip;//身段+鱼翅 public var link1:MovieClip;//身段1 public var link2:MovieClip;//身段2 public var link3:MovieClip;//身段3 public var link4:MovieClip;//身段4 public var link5:MovieClip;//尾部 public var pdf:MovieClip;//引导1 public var pdp:MovieClip;//引导2 public var pl:MovieClip;//引导3 // private var ripler:Rippler; public function fish5(rip:Rippler) { ripler = rip; //为MovieClip及其子类添加脚本代码 其中0表示第一帧 addFrameScript(0, frame1); return; } /** * 初始化init... */ private function frame1() { IsTouch = false; linePt = new Point(0, 0); targetX = Math.random() * stage.stageWidth; targetY = Math.random() * stage.stageHeight; pl.addEventListener(Event.ENTER_FRAME, plupdate); this.addEventListener(Event.ENTER_FRAME, thisupdate); this.addEventListener(MouseEvent.CLICK, MouseEventHandle); pl.visible = false; pdf.visible = false; pdp.visible = false; return; } //pl的帧频事件 public function plupdate(param1:Event) { if (int(Math.random() * 100) == 99 || IsTouch) { targetX = Math.random() * stage.stageWidth; targetY = Math.random() * stage.stageHeight; fsMove(pl, 0.8, 0.8, targetX, targetY); IsTouch = false; ripler.drawRipple(link3.x, link3.y, 50, 1); return; } fsMove(pl, 0.1, 0.1, targetX, targetY); return; } //帧频事件 public function thisupdate(param1:Event) { pdf.rotation = Math.atan2(pl.y - head.y, pl.x - head.x) * 180 / 3.14159; fsMove(pdf, 0.4, 0.4, pl.x, pl.y); pdp.x = pdf.getChildByName("pd").localToGlobal(linePt).x; pdp.y = pdf.getChildByName("pd").localToGlobal(linePt).y; //头部运动 head.rotation = Math.atan2(pdp.y - head.y, pdp.x - head.x) * 180 / 3.14159; fsMove(head, 0.04, 0.04, pdp.x, pdp.y); //鱼翅断运动 rotateBD(link0, head); link0.x = head.getChildByName("end").localToGlobal(linePt).x; link0.y = head.getChildByName("end").localToGlobal(linePt).y; //其他身段运动 lineToLink(linePt); //jjw++ } private function lineToLink(pt:Point):void { var index:int = 1; var obj1:MovieClip; var obj2:MovieClip; while (index < 6) { obj1 = this["link" + index]as MovieClip; obj2 = this["link" + (index - 1)]as MovieClip; rotateBD(obj1, obj2); obj1.x = obj2.getChildByName("end").localToGlobal(pt).x; obj1.y = obj2.getChildByName("end").localToGlobal(pt).y; index++; }return; } /** * 各身段旋转度计算 * @param param1 * @param param2 */ private function rotateBD(param1:MovieClip, param2:MovieClip) { var _loc_3:MovieClip = param1; _loc_3.rotation = Math.atan2(param2.y - _loc_3.y, param2.x - _loc_3.x) * 180 / 3.14159; return; } /** * * @param param1 * @param param2 * @param param3 * @param param4 * @param param5 */ private function fsMove(param1:MovieClip, param2:Number, param3:Number, param4:Number, param5:Number) { param1.x = param1.x + param2 * (param4 - param1.x); param1.y = param1.y + param3 * (param5 - param1.y); return; } //自定义方法================================ private function MouseEventHandle(e: MouseEvent): void { ripler.drawRipple(link3.x, link3.y, 50, 1); IsTouch = true; return; } } } 3、Rippler package be.nascom.flash.graphics { import flash.display.*; import flash.events.*; import flash.filters.*; import flash.geom.*; public class Rippler extends Object { private var _colourTransform:ColorTransform; private var _origin:Point; private var _source:DisplayObject; private var _defData:BitmapData; private var _expandFilter:ConvolutionFilter; private var _filter:DisplacementMapFilter; private var _scaleInv:Number; private var _drawRect:Rectangle; private var _matrix:Matrix; private var _buffer1:BitmapData; private var _buffer2:BitmapData; private var _fullRect:Rectangle; public function Rippler(param1:DisplayObject, param2:Number, param3:Number = 2) { var _loc_4:Number; var _loc_5:Number; _origin = new Point(); _source = param1; _scaleInv = 1 / param3; _buffer1 = new BitmapData(param1.width * _scaleInv, param1.height * _scaleInv, false, 0); _buffer2 = new BitmapData(_buffer1.width, _buffer1.height, false, 0); _defData = new BitmapData(param1.width, param1.height); _loc_4 = _defData.width / _buffer1.width; _loc_5 = _defData.height / _buffer1.height; _fullRect = new Rectangle(0, 0, _buffer1.width, _buffer1.height); _drawRect = new Rectangle(); _filter = new DisplacementMapFilter(_buffer1, _origin, BitmapDataChannel.BLUE, BitmapDataChannel.BLUE, param2, param2, "wrap"); _source.filters = [_filter]; _source.stage.addEventListener(Event.ENTER_FRAME, handleEnterFrame); _expandFilter = new ConvolutionFilter(3, 3, [0.5, 1, 0.5, 1, 0, 1, 0.5, 1, 0.5], 3); _matrix = new Matrix(_loc_4, 0, 0, _loc_5); _colourTransform = new ColorTransform(1, 1, 1, 1, 127, 127, 127); return; }// end function public function destroy() : void { _source.stage.removeEventListener(Event.ENTER_FRAME, handleEnterFrame); _buffer1.dispose(); _buffer2.dispose(); _defData.dispose(); return; }// end function public function drawRipple(param1:int, param2:int, param3:int, param4:Number) : void { var _loc_5:* = param3 >> 1; var _loc_6:* = (param4 * 255 & 255) * param4; _drawRect.x = (-_loc_5 + param1) * _scaleInv; _drawRect.y = (-_loc_5 + param2) * _scaleInv; var _loc_7:* = param3 * _scaleInv; _drawRect.height = param3 * _scaleInv; _drawRect.width = _loc_7; _buffer1.fillRect(_drawRect, _loc_6); return; }// end function private function switchBuffers() : void { var _loc_1:BitmapData; _loc_1 = _buffer1; _buffer1 = _buffer2; _buffer2 = _loc_1; return; }// end function private function handleEnterFrame(param1:Event) : void { var _loc_2:* = _buffer2.clone(); _buffer2.applyFilter(_buffer1, _fullRect, _origin, _expandFilter); _buffer2.draw(_loc_2, null, null, BlendMode.SUBTRACT, null, false); _defData.draw(_buffer2, _matrix, _colourTransform, null, null, true); _filter.mapBitmap = _defData; _source.filters = [_filter]; switchBuffers(); return; }// end function } }

    转载请注明原文地址: https://ju.6miu.com/read-4864.html

    最新回复(0)