2011-02-18 75 views
1

我正在AS3製作一款滑雪登機遊戲。我遇到的問題是我想在董事會後面的雪中留下一條小路。使用位圖數據繪製海量圖像

我有一個想法,並認爲實現這一目標的最佳方法是使用lineTo()方法將滑雪板的前一個位置繪製到當前位置。如果我一直沿着這條斜坡走這條路線,最終會出現一條長達23000像素的線條,這條線路看起來非常大,並且會對性能產生重大影響。

如果我將足跡movieclip轉換爲位圖會提高性能嗎?我針對的是Flash Player 9的最低限度,我發現在處理bmp超過2880像素時遇到問題,所以我認爲這種方法可能無法正常工作。

任何人都可以想到一個乾淨和快速的解決方案?

預先感謝

+2

你並不需要繪製23000個像素。無論如何,用戶不會看到23000像素。 – 2011-02-18 15:28:39

回答

1

一般來說,移動和縮放的位圖應該比矢量圖形更快。但是,如果您使用過濾器和像素修改方法(如bitmap.draw())很多,則會降低性能。在任何情況下,您都應該將大塊位圖分隔成更小的塊,並將可見屏幕區域外的所有內容都設置爲visible = false;

3

你可以存儲幾個值的固定長度矢量/陣列和不斷更新的單個值,而轉向其他的(所以他們有點「過時」):

var ptsNum:int = 25; 
var pts:Vector.<Point> = new Vector.<Point>(ptsNum,true); 
for(var i:int = 0 ; i < ptsNum ; i++) pts[i] = new Point(mouseX,mouseY); 
this.addEventListener(Event.ENTER_FRAME, update); 

function update(event:Event):void{ 
    //update 
    for(var i:int = 0 ; i < ptsNum-1 ; i++) pts[i] = pts[i+1]; 
    pts[ptsNum-1] = new Point(mouseX,mouseY); 
    //draw 
    graphics.clear(); 
    graphics.moveTo(pts[0].x,pts[0].y); 
    for(i = 0 ; i < ptsNum ; i++){ 
     graphics.lineStyle(i,0,i/ptsNum); 
     graphics.lineTo(pts[i].x,pts[i].y); 
    } 
} 

我在更新中使用兩個for循環只是爲了將更新從圖形中分離出來,因此很容易理解。當然,如果你願意的話,你可以使用一個for循環,或者使用類似forEach()的變化,直到你。

trail

如果你想畫一個線索的一個BitmapData,您可以重新繪製一個矩形(或你的邊界的形狀)到BitmapData,並使用嘉洛斯的褪色:

var sw:int = stage.stageWidth,sh:int = stage.stageHeight; 
var bd:BitmapData = new BitmapData(sw,sh,false,0); 
var pMouse:Point = new Point();//previous mouse position 
var zero:Point = new Point(); 
var fade:ColorMatrixFilter = new ColorMatrixFilter([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.95,0]);//alpha 0.95 
var r:Shape = new Shape();r.graphics.beginFill(0x009900,0.9);r.graphics.drawRect(-10,-15,20,30);//a tall rect 
addChild(new Bitmap(bd)); 
addEventListener(Event.ENTER_FRAME, update); 

function update(event:Event):void{ 
    r.x = mouseX; 
    r.y = mouseY; 
    r.rotation = Math.atan2(mouseY-pMouse.y,mouseX-pMouse.x) * 57.2957795;//rotate to mouse 
    pMouse.x = mouseX; 
    pMouse.y = mouseY; 
    bd.draw(r,r.transform.matrix);//draw the rect at it's current position 
    bd.applyFilter(bd, bd.rect, zero, fade);//apply the alpha colorMatrix 
} 

trail with alpha

HTH

+0

看起來不錯,我怎樣才能做到這一點透明的位圖 – bluelemonade 2016-07-26 10:31:02