2016-08-06 126 views
1

Ich möchte nur eine Gradientenmaske erstellen, die dynamisch durch AS3-Code generiert wird - für ein Objekt (ein Pentagon in meinem folgenden Beispiel) und ich kann einfach nicht! [The SWF file of what I've tried.]Dynamisch generiertes Anzeigeobjekt als Gradientenmaske

Der Code funktioniert gut, wenn es ignoriert die Alpha Gradient der dynamisch erzeugten Sprite für als Verlaufsmaske verwendet wird (es als feste Maske behandelt werden wird), während der genaue Code erkennt die "on-stage" erstelltes Objekt (über die Benutzeroberfläche) als Gradientenmaske!

Ich denke, die Laufzeit kann nicht nur das Objekt als Bitmap und damit die Ignoranz im Cache! Ich bin jedoch fest daran, das zu erreichen! Also bitte, Schuppen auf diese einige Lichter, ist jede Hilfe sehr im Voraus geschätzt :)

var X:Number = 100, Y:Number = 35, W:Number = 350, H:Number = 150; 

var mat:Matrix = new Matrix(); 
mat.createGradientBox(W, H, 0, X, Y); 

var gradientMask:Sprite = new Sprite(); 
gradientMask.graphics.beginGradientFill(GradientType.LINEAR, [0, 0], [1, 0], [0, 255], mat); 
gradientMask.graphics.drawRect(X, Y, W, H); 
gradientMask.graphics.endFill(); 

pentagon1.cacheAsBitmap = true; 
pentagon2.cacheAsBitmap = true; 
onStageGradient.cacheAsBitmap = true; 
gradientMask.cacheAsBitmap = true; 

pentagon1.mask = gradientMask; 
pentagon2.mask = onStageGradient; 

stage.addEventListener(Event.ENTER_FRAME, _onEnterFrame); 
function _onEnterFrame(e:Event):void { 
    pentagon1.x += 7; 
    pentagon2.x += 7; 

    if (pentagon1.x > 500) { 
     pentagon1.x = 0; 
     pentagon2.x = 0; 
    } 
} 


enter image description here

Antwort

2

Sie haben die gradientMask zum display list hinzuzufügen es in Wirkung zu haben.

pentagon1.parent.addChild(gradientMask); 
+1

Sie haben Recht und du bist mein Held! danke :) Es wäre ausgezeichnet, wenn Sie ein Warum zur Verfügung stellen!) – goodUser

+3

Ein Grund: Flash-Engine kümmert sich nur um das Objekt, das auf der Display-Liste angezeigt wird, wenn es alle Draws macht. Es ist ziemlich allgemein bekannt. – Vesper