flash与动画:图片移动
??????? 有时候,我们需要移动一张图片,让其看起来背景移动的效果,而移动图片的简单做法是不断改变x的坐标值,而有时候,需求是只能用一张图片就要实验滚屏的效果。采用什么办法会好一点,昨晚做了一个小实验,参考传教士一个小程序想法。采用复制像素的办法来达到我们的图片移动效果。 ???? 实验的内容: ????????????????????? 窗口分辨率是800x480 ?????????????????????? 滚动图片是1600x480长度??????????? ? 下面是基本的实验过程,new bg()是自定义的位图 继承bitmapdata 的基础类 。 import flash.display.BitmapData; import flash.display.Bitmap; var offset:int; var rect:Rectangle; var zp:Point = new Point(); var destX:int = 0; var currentX:int = 0; var canvas:BitmapData = new BitmapData(800,480,false,0x0); var bitmap:Bitmap = addChild(new Bitmap(canvas)) as Bitmap; var targetBmp:BitmapData=new bg(); stage.addEventListener(Event.ENTER_FRAME,function(e:Event):void { currentX+=1; render(); }); function render():void { offset = currentX % 1600; if (offset+800<=1600) { rect = new Rectangle(offset,800,480); } else { rect = new Rectangle(offset,1600 - offset,480); } canvas.copyPixels(targetBmp,rect,zp); if (offset >800) { canvas.copyPixels(targetBmp,canvas.rect,new Point(1600-offset,0)); } }
后续还可以继续改写一下程序的运作。 明天继续完善这个小实验。 ? import flash.display.BitmapData; import flash.display.Bitmap; import flash.geom.Rectangle; import flash.geom.Point; var offset:int; var rect:Rectangle=new Rectangle(0,1,1); var zp:Point = new Point(); var pt:Point=new Point(); var destX:int = 0; var currentX:int = 0; var canvas:BitmapData = new BitmapData(800,function(e:Event):void { currentX+=1; render(); }); function render():void { offset = currentX % 1600; if (offset+800<=1600) { //rect = new Rectangle(offset,480); rect.x=offset; rect.y=0; rect.width=800; rect.height=480; } else { //rect = new Rectangle(offset,480); rect.x=offset; rect.y=0; rect.width=1600-offset; rect.height=480; } canvas.copyPixels(targetBmp,zp); if (offset >800) { pt.x=1600-offset; pt.y=0; canvas.copyPixels(targetBmp,pt); } } 对比一下第二种写法。 new point 和new Rectangle 都减少了 创建,因为在EnterFrame 里面不断创建 是会产生消耗,而这new Point()这种不起眼的写法对内存消耗效果不是一下子可以看到的,而是累计的。在一次实验当中,同事把这个作为一个优化点更改出来。当时也学到不少细节的东西,至于效果明显不明显,我们肉眼很难看到。只能一点点体验 ?再提炼一下。这种做法会有点别扭,减少了创建对象。 import flash.display.BitmapData; import flash.display.Bitmap; import flash.geom.Rectangle; import flash.geom.Point; var offset:int; var rect:Rectangle = new Rectangle(0,1); var pt:Point=new Point(); var currentX:int = 0; var canvas:BitmapData = new BitmapData(800,run); function run(e:Event):void { currentX += 1; render(); } function render():void { offset = currentX % 1600; if (offset+800<=1600) { rect.x = offset; rect.y = 0; rect.width = 800; rect.height = 480; } else { rect.x = offset; rect.y = 0; rect.width = 1600 - offset; rect.height = 480; } pt.x = pt.y = 0; canvas.copyPixels(targetBmp,pt); if (offset >800) { pt.x = 1600 - offset; pt.y = 0; canvas.copyPixels(targetBmp,pt); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |