Pasul 4. Adaugarea elementelor nivelului.
In aceasta lectie vom anexa elemente nivelului, cum ar fi obstacole si scari. Iata o lista cu ce vei adauga:
- Scari
- Obstacole
- Trambuline
Adaugarea scarilor
Scarile vor fi patrate ca si blocurile, numai ca vor avea alta culoare,si anume galben, astfel va fi usor sa le identifici pe scena. Trebuie sa creezi si un obiect ca va contine intreg nivelul, inclusiv blockHolder-ul, iar in cadrul acestuia, un obiect Sprite care va include toate scarile. Inlocuieste partea in care adaugi blockHolder-ul inaintea functiei cu asta:
var ladderHolder:Sprite = new Sprite();
addChild(ladderHolder);
Acum, trebuie sa completam anumite lucruri functiei createLvl(). Numarul care va simboliza scara este „2”, iar bucla „for” va fi inlocuita cu:
for(var i:int = 0;i<lvlArray.length;i++){
if(i/lvlColumns == int(i/lvlColumns)){
row ++;
}
var newPlacement;
if(lvlArray[i] == 1){
newPlacement = new Block();
newPlacement.graphics.beginFill(0xFFFFFF,
1);
newPlacement.graphics.drawRect(0,0,25,25);
blockHolder.addChild(newPlacement);
} else if (lvlArray[i] == 'MAIN'){
newPlacement = mcMain;
} else if (lvlArray[i] == 2){
newPlacement = new Sprite();
newPlacement.graphics.beginFill(0xFFFF00,1);
newPlacement.graphics.drawRect(0,0,25,25);
ladderHolder.addChild(newPlacement);
}
if(lvlArray[i] != 0){
newPlacement.x = (i-(row-1)*lvlColumns)*newPlacement.width;
newPlacement.y = (row-1)*newPlacement.height;
}
}
Acest nou cod doar adauga scarile si refoloseste o anumita variabila, astfel incat nu devine repetitiv. Urmatorul lucru pe care il vei face este mutarea lui lvlHolder in locul lui blockHolder in momentul cand o tasta sageata e apasata. Sper ca stii cum sa faci asta. Ca un indiciu, uita-te in functia moveChar(). Totusi, trebuie ca aceste scari sa si functioneze. Pentru asta trebuie sa inserezi o variabila care ne va spune daca jucatorul atinge scara:
var mainOnLadder:Boolean = false;
Apoi vei adauga o bucla care va testa daca personajul atinge vreo scara. Adauga acest cod in functia moveChar() :
for(i=0;i<ladderHolder.numChildren;i++){
var hitLadder:DisplayObject = ladderHolder.getChildAt(i);
if(mcMain.hitTestObject(hitLadder)){
if(mcMain.x >= hitLadder.x + lvlHolder.x - 10 && mcMain.x
<= hitLadder.x + lvlHolder.x + 35){
mainOnLadder = true;
jumpSpeed = jumpSpeedLimit;
break;
}
}
mainOnLadder = false;
}
Acum nu-i poti permite personajului sa sara daca e pe o scara si trebuie sa il controlezi pentru a se misca in sus si in jos, in functie de ce tasta e apasata. Iata codul ce va controla tasta sus:
if(upKeyDown || mainJumping){
if(!mainOnLadder){
mainJump();
}
}
if(upKeyDown && mainOnLadder){
mcMain.y -= mainSpeed;
}
if(downKeyDown && mainOnLadder && !mainOnGround){
mcMain.y += mainSpeed;
}
Abia acum poti schimba codul nivelului pentru a te asigura ca scarile merg.
var lvlArray1:Array = new Array(
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,X,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
);
Daca il testezi va merge destul de bine. Singura problema e ca user-ul e mereu sub scara, dar acest lucru poate fi usor reparat prin adaugarea urmatoarei instructiuni la sfarsitul functiei:
MovieClip(root).setChildIndex(mcMain,MovieClip(root).numChildren-1);
Acum ca am reusit cu crearea scarilor, putem trece la urmatorul punct de pe lista – atasarea obstacolelor sau a obiectelor de care se va lovi personajul. Ele vor actiona ca un fel de perete care il va face pe user sa ricoseze atunci cand se va lovi de el. Din nou obiectul va avea forma unui patrat, dar de data aceasta va fi verde. Ca de fiecare data, vei avea nevoie de un suport pentru acest perete:
var bumperHolder:Sprite = new Sprite();
lvlHolder.addChild(bumperHolder);
|