主要代码:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.net.URLVariables;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.display.DisplayObject;
import flash.display.Bitmap;
public class Init extends Sprite {
var rects:Array,
numRects:int = stage.stageWidth / _width,
_width:Number = 20,
_height:Number = 80,
_rotation:int = 0,
_vr:Number = 3;
public function Init() {
init();
}
function init():void
{
rects = new Array();
var bitmap:BitmapData = new slider();
var _point = new Point();
for(var i:int = 0; i < numRects; i++)
{
var _rect = new Rectangle(i * _width, 0, _width, 80);
var smallBD:BitmapData = new BitmapData(_width, 80);
smallBD.copyPixels(bitmap, _rect, _point);
//var d:Bitmap = new Bitmap(smallBD);
var rect:Rect = new Rect(smallBD, _width, _height);
rect.x = i * _width + _width / 2;
addChild(rect);
rects.push(rect);
}
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
function onEnterFrame(e:Event):void
{
for(var i:int = 0; i < numRects; i++)
{
rects[i].rotationY += _vr;
}
_rotation += _vr;
if(_rotation % 180 == 0)
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
}
}
}
这是直接类:
package {
import flash.display.Sprite;
import flash.utils.ByteArray;
import flash.display.Bitmap;
import flash.display.BitmapData;
public class Rect extends Sprite {
private var bitmap:BitmapData,
_width:Number,
_height:Number;
public function Rect(bitmap:BitmapData, width:Number = 20, height:Number = 80) {
this.bitmap = bitmap;
this._width = width;
this._height = height;
init();
}
function init():void
{
graphics.beginBitmapFill(bitmap, null, true, true);
graphics.drawRect(-_width / 2, 0, _width , _height);
graphics.endFill();
}
}
}
我将导入的图像分成碎片,并且每个碎片都添加到每个矩形精灵中,所以我正在制作旋转效果,但问题是,当我制作它时,我才能使精灵居中,所以我做了(-_width / 2)
- 使每个精灵按x轴居中,然后添加到x位置添加_width / 2
的技巧,但我无法弄清楚为什么图像变形,你可以通过geting尝试这个代码一张780 x 80的图像
答案 0 :(得分:0)
嗯,看到你使用beginBitmapFill()
来制作矩形,你可以自由指定它的绘制位置。您似乎需要将矩形围绕其中心旋转,而不是左上角。你写好-_width/2
作为开始X,现在你只需要写-height/2
作为起始Y.
graphics.drawRect(-_width / 2, -_height / 2, _width , _height);
这将使您绘制的位图的中心位于精灵的(0,0)位置,这样您应用的任何旋转都会使精灵围绕其绘制的矩形的中心转动。
通常,如果你明确地将旋转应用于显示对象,它总是围绕它自己旋转(0,0),所以如果你想要补偿,要么写变换矩阵(在SO上有几个例子,比如说{{ 3}}),或绘制你的精灵,使(0,0)位于你想要旋转的点。