2016-05-27 11 views
-2

In meinem Adobe Flash-Spiel habe ich zwei dynamische Textfelder auf der Bühne platziert. Die Grafiken für das Spiel werden mit Actionscript 3 erstellt. Die Blöcke, die durch den Code erzeugt werden, verdecken immer den Text. Kann jemand helfen?Dynamische Textfelder oben

var lvlHolder:Sprite = new Sprite(); 
addChild(lvlHolder); 
//creating the level 
//this guy will hold all of the blocks 
//hold all trampolines 
var trampHolder:Sprite = new Sprite(); 
lvlHolder.addChild(trampHolder); 
var bgHolder:Sprite = new Sprite(); 
lvlHolder.addChild(bgHolder); 
var blockHolder:Sprite = new Sprite(); 
//then we add him to stage 
lvlHolder.addChild(blockHolder); 
var scoreHolder:Sprite = new Sprite(); 
lvlHolder.addChild(scoreHolder); 
var deathHolder:Sprite = new Sprite(); 
lvlHolder.addChild(deathHolder); 
//this guy will hold all of the ladders 
var ladderHolder:Sprite = new Sprite(); 
//adding him to stage 
lvlHolder.addChild(ladderHolder); 
//this guy will hold all of the bumpers 
var bumperHolder:Sprite = new Sprite(); 
lvlHolder.addChild(bumperHolder); 
var enemyHolder:Sprite = new Sprite(); 
lvlHolder.addChild(enemyHolder); 
//hold all trampolines 
var invisMarkerHolder:Sprite = new Sprite(); 
lvlHolder.addChild(invisMarkerHolder); 
var coinHolder:Sprite = new Sprite(); 
lvlHolder.addChild(coinHolder); 
var goalHolder:Sprite = new Sprite(); 
lvlHolder.addChild(goalHolder); 
var bigCoinHolder:Sprite = new Sprite(); 
lvlHolder.addChild(bigCoinHolder); 



function createLvl():void{ 
//getting the current level that we are on 
var lvlArray:Array = MovieClip(root)['lvlArray'+lvlCurrent]; 
//we have to find how far this level goes 
//this will be used so we know when to move to the next row 
//there will always be 16 rows, so this is how we find it out 
//of course, this will make the lvl formatting very strict 
var lvlColumns:int = Math.ceil(lvlArray.length/16); 
//now we must create the level 
score.text = "Score = " + mainScore; 
deaths.text = "Deaths = " + deathNum; 
for(var i:int = 0;i<lvlArray.length;i++){ 
    //checking if we move onto the next row 
    //this checks if i is divisible by the # of columns 
    if(i/lvlColumns == int(i/lvlColumns)){ 
     row ++; 
    } 
    //defining a target 
    var newPlacement; 
    if(lvlArray[i] == 1){ 
     //making a new block 
     newPlacement = new Block(); 
     //drawing the block 
     newPlacement.graphics.beginFill(0xFFFFFF/*The color for shape*/,1/*The alpha for the shape*/); 
     //turning the shape into a square 
     newPlacement.graphics.drawRect(0,0,25,25); 
     //then finally adding it to stage 
     blockHolder.addChild(newPlacement); 
    } else if (lvlArray[i] == 'MAIN'){ 
     newPlacement = mcMain; 
    } else if (lvlArray[i] == 2){ 
     newPlacement = new Sprite(); 
     //drawing the ladder 
     newPlacement.graphics.beginFill(0xFFFF00,1); 
     //turning it into a square 
     newPlacement.graphics.drawRect(0,0,25,25); 
     //then adding it to stage 
     ladderHolder.addChild(newPlacement); 
    } else if (lvlArray[i] == 3){ 
     newPlacement = new Sprite(); 
     //drawing the bumper 
     newPlacement.graphics.beginFill(0xFFFFFF,1); 
     //turning it into a square 
     newPlacement.graphics.drawRect(0,0,25,25); 
     //then adding it to stage 
     bumperHolder.addChild(newPlacement); 
    } else if (lvlArray[i] == 4){ 
     newPlacement = new Shape(); 
     newPlacement.graphics.beginFill(0x00FF00); 
     newPlacement.graphics.drawCircle(12.5,25,12.5); 
     trampHolder.addChild(newPlacement); 
    } else if (lvlArray[i] == 5){ 
     //adding an enemy 
     newPlacement = new Enemy(); 
     enemyHolder.addChild(newPlacement); 
    } else if (lvlArray[i] == 6){ 
     //adding an invisible marker for the enemy to turn around 
     newPlacement = new Shape(); 
     newPlacement.graphics.beginFill(0x000000,0); 
     newPlacement.graphics.drawRect(0,0,25,25); 
     invisMarkerHolder.addChild(newPlacement); 
    } else if (lvlArray[i] == 7){ 
     //adding coins 
     newPlacement = new Coin(); 
     //we'll put it in the enemyHolder because this is the only symbol 
     //that isn't being looped through 
     coinHolder.addChild(newPlacement); 
    } else if (lvlArray[i] == 8){ 
     //the goal! 
     newPlacement = new Goal(); 
     goalHolder.addChild(newPlacement); 
    } else if (lvlArray[i] == 9){ 
     newPlacement = new BigCoin(); 
     bigCoinHolder.addChild(newPlacement); 
    } else if (lvlArray[i] == 'LEFTR'){ 
     newPlacement = new Block(); 
     newPlacement.graphics.beginFill(0xFFFFFF,1); 
     newPlacement.graphics.drawRoundRect(0, 0, 25, 25, 9); 
     newPlacement.graphics.endFill(); 
     newPlacement.graphics.beginFill(0xFFFFFF); 
     newPlacement.graphics.drawRect(15,0,10,25); 
     newPlacement.graphics.endFill(); 
     blockHolder.addChild(newPlacement); 
    } else if (lvlArray[i] == 'RIGHTR'){ 
     newPlacement = new Block(); 
     newPlacement.graphics.beginFill(0xFFFFFF); 
     newPlacement.graphics.drawRoundRect(0, 0, 25, 25, 9); 
     newPlacement.graphics.endFill(); 
     newPlacement.graphics.beginFill(0xFFFFFF); 
     newPlacement.graphics.drawRect(0,0,10,25); 
     newPlacement.graphics.endFill(); 
     blockHolder.addChild(newPlacement); 
    } 

    if(lvlArray[i] != 0){ 
     //change the coordinates of the block 
     newPlacement.x = (i-(row-1)*lvlColumns)*newPlacement.width; 
     newPlacement.y = (row-1)*newPlacement.height; 
    } 

} 
//reset the row for another use 
row = 0; 
//then we center the screen on the main character 
//this variable will tell us how far away we have to move everything 
//250 is about centered for mcMain we'll use that number 
var mainMove:int = 250 - mcMain.x; 
//then move mcMain and the entire level to center on him 
mcMain.x += mainMove; 
lvlHolder.x += mainMove; 

}

‚Score‘ und ‚Tod‘ sind die Instanznamen der beiden dynamischen Textfelder auf der Bühne.

Here you can see the score and death counter being covered up by the generated graphics.

+0

Wie machen Sie diese Grafiken genau und wie fügen Sie sie hinzu? – null

+1

Das Anzeigen des Codes würde sehr hilfreich sein. Wahrscheinlich müssen Sie nur den Code ändern, indem Sie 'addChild (---)' verwenden (was Sachen auf die oberste Ebene legt), indem Sie 'addChildAt (---, 0)' verwenden, was es auf den angegebenen Index ('0 'ist die unterste Schicht – BadFeelingAboutThis

+0

Ich habe den obigen Code hinzugefügt. Ich entschuldige mich, wenn es unorganisiert erscheint. –

Antwort

1

Da die addChild Funktion DisplayObject an der Spitze der Mutter ohne Index hinzufügen würde. Sie können Index verwenden, um Ihre DisplayObject s zu verwalten, aber es ist sehr problematisch.

Ich schlage vor, Sie zwei Schichten (MovieClip) erstellen, und fügen Sie die Graphics in die untere Schicht, fügen Sie die TextField in die Schicht für. Damit wäre die TextField immer an der Spitze.

+0

Wie könnte ich das machen? –