使用位图将as3图像放在另一个图像上

时间:2013-04-04 03:55:41

标签: actionscript-3 flash

好的,所以即时尝试使用以下方法将位图图像作为背景加载:

screenBitmapData.copyPixels(tilesBitmapData,new Rectangle(sourceX,sourceY,tileSize,tileSize),new Point(destX,destY));
screenBitmap = new Bitmap(screenBitmapData);
addChild(screenBitmap);

这会正确加载我的平铺地图并将其显示在屏幕上。

现在我想添加另一张将用作我的角色的图像,显​​示它的帧包含我的角色动作,然后显示图像如下:

screenBitmapData.copyPixels(playerSheetBitmapData, new Rectangle(currentSpriteColumn * CHAR_SPRITE_WIDTH, currentSpriteRow * CHAR_SPRITE_HEIGHT, CHAR_SPRITE_WIDTH, CHAR_SPRITE_HEIGHT), new Point(xPos, yPos), null, null,true);

我在我的角色形象上设置了alpha通道,这是我在地图上移动时的结果:

http://snag.gy/L2uuR.jpg

如您所见,背景图像不会刷新。而我根本不知道该怎么做。我非常喜欢使用flash和as3而且我已经尝试了几天才能使它工作。我知道它与copypixel有关,或者在我再次绘制精灵之前重绘背景......有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您需要重绘整个场景。你现在正在做的就是将玩家吸引到你之前抽签的结果上。

在您的情况下,您需要做的就是在绘制角色之前每帧绘制整个背景。它看起来像这样:

function renderScene():void
{
    // Draw the background, which will replace all the current graphics
    // on the Bitmap.
    screenBitmapData.copyPixels(tilesBitmapData,new Rectangle(sourceX,sourceY,tileSize,tileSize),new Point(destX,destY));

    // Then draw the player.
    screenBitmapData.copyPixels(playerSheetBitmapData, new Rectangle(currentSpriteColumn * CHAR_SPRITE_WIDTH, currentSpriteRow * CHAR_SPRITE_HEIGHT, CHAR_SPRITE_WIDTH, CHAR_SPRITE_HEIGHT), new Point(xPos, yPos), null, null,true);
}

要实际清除位图,您只需使用fillRect()填充颜色(例如黑色):

// Fill the Bitmap with black.
screenBitmapData.fillRect( screenBitmapData.rect, 0x000000 );