主代码:
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);
}
}
}
}这是rect类:
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,但我不明白为什么图像会变形,你可以尝试这个代码,得到一个780x80的图像

发布于 2012-11-29 11:53:36
好吧,看到你使用beginBitmapFill()来制作你的矩形,你可以自由地指定它将被绘制在哪里。您似乎需要您的矩形将围绕其中心旋转,而不是左上角。你用X开头写-_width/2写得很好,现在你只需要把-height/2写成Y开头就行了。
graphics.drawRect(-_width / 2, -_height / 2, _width , _height);这将使绘制的位图的中心位于精灵的(0,0)位置,因此您应用的任何旋转都会使精灵围绕其绘制的矩形的中心旋转。
通常,如果您简单地将旋转应用于显示对象,它始终会围绕其自身的(0,0)旋转,因此,如果您要进行补偿,可以编写变换矩阵(例如this one ),或者绘制精灵以使(0,0)位于您要旋转的点。
https://stackoverflow.com/questions/13615636
复制相似问题