2015-05-01 117 views
0

我在我的遊戲中有一個移動的卡車,我希望城市的光線反射(不是背景)在它的身體移動時可見。actionscript 3.0可見遮罩在可見遮罩對象上

站在卡車後面什麼都沒有關係,有的樹木和建築物。

那麼, 我添加背景(不重要); 然後我把卡車加到舞臺上; 然後我添加另一個具有整個舞臺大小的MovieClip(城市燈光和東西),並將其設置爲卡車的遮罩物。

我不想讓卡車消失,我只是想讓遮罩物體在它上面透出一些透明度;

我知道關於掩蔽,也捕獲我的movieclip作爲位圖,但它不會在我的情況下工作;因爲這裏卡車保持完全可見並且面罩半透明。

請幫助我,我的時間不多了:/

編輯

這是基於我當前的代碼關閉asnwers之一:

var buildingHolder: Sprite = new Sprite; 
this.addChild(buildingHolder); 

var Mask: Sprite = new Sprite() 
Mask = Sprite(buildingHolder); 
Mask.alpha = 1; 
Mask.cacheAsBitmap = true; 
this.addChild(Mask); 

var reflection: MovieClip = new nightSky1Mask; 
reflection.x = 0; 
reflection.y = 480; 
reflection.alpha = .6; 
reflection.scaleX *= 320/reflection.width; 
reflection.scaleY = reflection.scaleX; 
reflection.cacheAsBitmap = true; 
reflection.mask = Mask; 
this.addChild(reflection); 

for (var i: int = 0; i <= 29; i++){ 
//some codes are deleted here 

    var image: MovieClip = new level1Images[i]; 
    image.x = // deleted 
    image.y = // deleted 
    image.scaleX *= 30/image.width * 2; 
    image.scaleY *= 5/image.width * 2; 
    buildingHolder.addChild(image) 
    currLevelImages.push(image) 
} 
+0

顯示你當前的代碼。您需要爲城市燈光影片剪輯創建一個蒙版,因爲您不想掩蓋卡車,所以想遮掩燈光。如果您的卡車是帶有透明度的png或bimtap類型物體,則創建一個可用作燈光面罩的副本非常簡單。如果你顯示你的代碼,可以給出一個具體的例子。 – BadFeelingAboutThis

+0

我認爲這裏的問題是這個Mask是buildingHolder本身,我的意思是當我將它的alpha設置爲0.1時,我看不到它後面的buildingHolder。他們完全一樣不是副本! @LDMS – innerUFOmaker

+0

是的,投射一個物體不會複製它。你正在做的是創建一個新的精靈(在Mask var中),然後在賦值var與buildingHolder var中相同的對象之後。一個對象,兩個引用它的變量。 – BadFeelingAboutThis

回答

0

DON 'T想掩蓋卡車。你想要掩蓋的是城市的燈光。

你需要創建一個卡車的副本,並用它掩蓋城市的燈光。

假設你有在出口類的庫位圖作爲TruckImage和你的燈都爲ActionScript導出爲Lights,你可以做這樣的事情:

var truck:Bitmap = new Bitmap(new TruckImage()); 

//scale and position however you'd like 
truck.scaleX = truck.scaleY = .25; 
truck.y = 100; 
addChild(truck);  

var theMask:Bitmap = new Bitmap(truck.bitmapData); 
theMask.cacheAsBitmap = true;//!very important 
theMask.scaleX = theMask.scaleY = truck.scaleX; 
addChild(theMask); //also important 

lights = new Bitmap(new Lights()); 
lights.cacheAsBitmap = true;//!very important 
lights.mask = theMask; 
addChild(lights); 

//let's move the truck and the mask every frame 
addEventListener(Event.ENTER_FRAME,enterFrame); 
function enterFrame(e:Event):void { 
    truck.x = (truck.x + 2) % stage.stageWidth; 
    theMask.x = truck.x; 
} 

編輯

試試像這樣:(創建你的建築物的位圖副本)

var buildingHolder:Sprite = new Sprite(); 
    this.addChild(buildingHolder); 

    //create a bitmap data object and draw the building holder sprite into it (making a copy) 
    var maskBMD:BitmapData = new BitmapData(buildingHolder.width,buildingHolder.height,true,0x00000000); 
    maskBMD.draw(buildingHolder); 

    var msk:Bitmap = new Bitmap(maskBMD,"auto",true); 
    msk.cacheAsBitmap = true; 
    this.addChild(msk); 

    var reflection:MovieClip = new nightSky1Mask; 
    reflection.x = 0; 
    reflection.y = 480; 
    reflection.alpha = .6; 
    reflection.scaleX *= 320/reflection.width; 
    reflection.scaleY = reflection.scaleX; 
    reflection.cacheAsBitmap = true; 
    reflection.mask = msk; 
    this.addChild(reflection); 

    for (var i: int = 0; i <= 29; i++){ 
    //some codes are deleted here 

     var image: MovieClip = new level1Images[i]; 
     image.x = // deleted 
     image.y = // deleted 
     image.scaleX *= 30/image.width * 2; 
     image.scaleY *= 5/image.width * 2; 
     buildingHolder.addChild(image) 
     currLevelImages.push(image) 
    } 

或者,你可以做這樣的事情,讓您的建築的兩個副本:

var buildingHolder:Sprite = createBuilding(); 
    var buildingHolderMask:Sprite = createBuilding(false); 

    function createBuilding(addToArray:Boolean = true):Sprite { 
     var building:Sprite = new Sprite(); 

     for (var i: int = 0; i <= 29; i++){ 
     //some codes are deleted here 

      var image: MovieClip = new level1Images[i]; 
      image.x = // deleted 
      image.y = // deleted 
      image.scaleX *= 30/image.width * 2; 
      image.scaleY *= 5/image.width * 2; 
      building.addChild(image) 
      if(addToArray) currLevelImages.push(image) 
     } 
     return building; 
    } 
+0

我很感激; 不幸的是,我絕對不能顯示代碼,因爲可以猜測的原因! 如果你想要真相,根本就沒有卡車,那麼在物理引擎的基礎上移動一系列動畫片段(建築物的一部分)。它們都被添加到一個名爲buildingHolder的精靈。 隨着建築物的移動和晃動,城市的燈光必須在建築物(玻璃窗)上可見,才能體現出反思的感覺。 我要試一下,看看你的代碼是否適用於我的情況,並會更新你。 再次感謝 – innerUFOmaker

+0

好吧,我剛剛面對的第一個問題是,正如我所說的所有這些部分都在一個精靈,所以例如mySprite.bitmapData將無法正常工作。 如何將一個Sprite的副本與其所有子節點一起作爲bitmapData進行移動? – innerUFOmaker

+0

你如何實例化所述精靈?它是通過代碼還是放在時間軸上? – BadFeelingAboutThis