2016-07-05 114 views
2

希望這是一個簡單直接的地方,我錯過了一些基本的東西。AS3 BitmapFill問題

試圖移動到平鋪背景,所以我可以擴展我的遊戲地圖而不使用愚蠢的巨大位圖背景。

我有一系列貼圖關鍵幀上的一系列貼圖位圖的符號/類,我最終會爲每個遊戲選擇,現在只是試圖使其工作並將其硬編碼到第一個關鍵幀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); 

這裏的「大西洋的一半大小的版本「關鍵幀位圖:

enter image description here

正如你看到的,沒有什麼特別的,甚至沒有預期的最終位圖,只是想在我去作最後的位圖來獲取結構和情景驅動的背景選擇過程工作。

和我呈現時看到的半尺寸版本。請注意,我沒有錯誤,我只是我沒有看到我所期望看到:

enter image description here

當我應該是這樣的,在這裏它與單片位圖背景(全尺寸clicky):

enter image description here

============================ UPDATE在答題=========== ================

以下由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

+0

does'oceanSource.gotoAndStop(「Atlantic」);''addChild(oceanSource);'看起來像預期的那樣? – www0z0k

回答

4

好像問題就在這裏:

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

應該

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

因爲widthheight基於內容的大小來計算,而stageWidthstageHeight回報ctual swf舞臺尺寸
(請參閱示例here

+0

根據您的回答查看上面的更新。謝謝! – vossiewulf