AS3 BitmapFill问题

时间:2016-07-05 10:29:30

标签: actionscript-3

希望这是一个简单明了的地方,我错过了一些基本的东西。

尝试移动到平铺背景,这样我就可以扩展我的游戏地图而不使用愚蠢的大位图背景。

我有一个符号/类,在一系列标记的关键帧上有一系列可平铺的位图,我们最终会为每个游戏选择,现在只是试图让它工作并且它被硬编码到第一个关键帧frameLabel。这是有问题的代码,似乎完全遵循如何从我在尝试之前查找的其他来源(包括api文档)执行此操作的建议:

var oceanSource:LOB_Ocean_Bkgs = new LOB_Ocean_Bkgs();
            oceanSource.gotoAndStop("Atlantic");
            var oceanBitMapData:BitmapData = new BitmapData(oceanSource.width, oceanSource.height);
            oceanBitMapData.draw(oceanSource);

            var oceanBackground:Sprite = new Sprite();

            oceanBackground.graphics.beginBitmapFill(oceanBitMapData);
            oceanBackground.graphics.drawRect(0, 0, stage.width, stage.height);
            oceanBackground.graphics.endFill();

            addChild(oceanBackground);

这是" Atlantic"的半尺寸版本。关键帧位图:

enter image description here

如您所见,没有什么特别的,甚至是预期的最终位图,只是想在我制作最终位图之前让结构和场景驱动的背景选择过程正常工作。

我渲染时看到的半尺寸版本。请注意我没有错误,我只是看不到我期望看到的内容:

enter image description here

当我应该是这样的时候,这里是单片位图背景(全尺寸点击):

enter image description here

============================答案更新================ ===========

www0z0k下面提供的答案。谢谢!

我现在已将其更改为足够大的固定值,以便按预期进行所有播放。

var oceanSource:LOB_Ocean_Bkgs = new LOB_Ocean_Bkgs();
            oceanSource.gotoAndStop("Pacific");
            var oceanBitMapData:BitmapData = new BitmapData(oceanSource.width, oceanSource.height);
            oceanBitMapData.draw(oceanSource);

            //oceanBackground is public var declared with class
            oceanBackground.graphics.beginBitmapFill(oceanBitMapData);
            oceanBackground.graphics.drawRect(0, 0, 6400, 4000);
            oceanBackground.graphics.endFill();

            //deselect ships listener
            oceanBackground.addEventListener(MouseEvent.CLICK, clearShips);

            addChildAt(oceanBackground, 0);

现在只需要让它由场景文件驱动,并且还可以恢复我的十六进制网格;第二部分是将十六进制网格与背景分开,因此它的颜色也可以通过场景或玩家来控制。

并且还渲染出一些更好看的可平铺海洋位图。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:4)

似乎问题就在这里:

oceanBackground.graphics.drawRect(0, 0, stage.width, stage.height);

应该是

oceanBackground.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);

因为widthheight是根据内容大小计算的,stageWidthstageHeight会返回实际的swf舞台大小
(参见示例here