E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale Adobe Flash

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

GRAFICA 2D  /  Adobe Flash  /  ActionScript (14)

Implementarea unui joc tip platforma in AS3 (partea I)

28.10.2008
Implementarea unui joc tip platforma in AS3 (partea I)

Iata-ne la un tutorial pentru avansati in care vom crea un joc de tip platforma in Action Script 3.

Total vizualizari: 6027 6027 afisari   |   Comentarii  1   |   Rating   |   (6 voturi)   |   Timp necesar: 45 min 45 min   |   Nivel de cunostiinte necesar: Avansat  Avansat

Sursa:  Mrsunstudios.com  
Autor:  Mr. Sun
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 1 2 3 »
comenteaza printeaza

Urmatorul pas consta in alcatuirea unei clase ce va avea toate codurile pentru blocuri. E nevoie de un nou fisier extern ActionScript numit "Block.as". Acestuia, trebuie sa ii atasezi urmatorul cod:

package{
    import flash.display.Sprite;
    import flash.display.MovieClip;
    import flash.events.*;
 
    //sprites sunt movie clip-uri fara nici un frame
    public class Block extends Sprite{
        //variabila _root este o referinta la radacina documentului
        private var _root:Object;
 
        public function Block(){
            //acest cod va fi executat o singura data
            addEventListener(Event.ADDED, beginClass);
            //acest cod va fi executat continuu
            addEventListener(Event.ENTER_FRAME, eFrame);
        }
 
        private function beginClass(event:Event):void{
            // definim radacina documentului
            _root = MovieClip(root);
        }
 
        private function eFrame(event:Event):void{
 
        }
    }
}

Vom completa acest cod mai incolo, momentan, trebuie sa definesti functia care va situa aceste blocuri pe scena ajutandu-te de urmatorul cod scris la sfarsitul frame-ului:

//crearea nivelului
//variabila blockHolder va contine toate blocurile
var blockHolder:Sprite = new Sprite();
//adaugam blocurile pe scena
addChild(blockHolder);
function createLvl():void{
    //aflam nivelul curent pe care suntem
    var lvlArray:Array = MovieClip(root)['lvlArray'+lvlCurrent];
    //aflam pana unde se intinde nivelul
    //acesta va fi folosit pentru a stii cand sa trecem la randul urmator
    //vor fi intotdeauna 16 randuri
    //ceea ce inseamna ca formatarea lvl va fi foarte stricta
    var lvlColumns:int = Math.ceil(lvlArray.length/16);
    //cream nivelul
    for(var i:int = 0;i<lvlArray.length;i++){
        if(lvlArray[i] == 1){
            //verificam daca trebuie sa trecem la nivelul urmator
            //daca i este divizibil la numarul de coloane
            if(i/lvlColumns == int(i/lvlColumns)){
                row ++;
            }
 
            //cream un nou bloc
            var newBlock:Block = new Block();
            //desenam blocul
            newBlock.graphics.beginFill(0xFFFFFF /*Culoarea formei*/,1/*Transparenta formei - 1 pentru opac*/);
            //desenam un patrat
            newBlock.graphics.drawRect(0,0,25,25);
            //schimbam coordonatele blocului
            newBlock.x = (i-(row-1)*lvlColumns)*newBlock.width;
            newBlock.y = (row-1)*newBlock.height;
            //punem blocul pe scena
            blockHolder.addChild(newBlock);
        } else if (lvlArray[i] == 'MAIN'){
            mcMain.x = (i-(row-1)*lvlColumns)*newBlock.width;
            mcMain.y = (row-1)*newBlock.height;
        }
    }
    //resetam variabila row
    row = 0;
}
 
//apelam functia createlvl
createLvl();

Recapituleaza aceasta parte si incearca sa o intelegi. De acest tip de cod ai nevoie daca vrei sa devii un developer mai bun. In partea ce va urma vei invata cum sa adaugi coduri acestor blocuri pentru a le face sa interactioneze cu personajul.



Pasul 3. Programarea nivelului

Acum ca ai aranjat toate blocurile pe scena, le poti adauga si cateva coduri. In primul rand, trebuie sa faci in asa fel incat ele sa fie singurul lucru pe care sa stea personajul principal, iar pentru asta ai de inlocuit acest cod in functia mainJump:

// cand personajul atinge podeaua, saritura s-a terminat
// acest cod va fi schimbat la crearea nivelurilor
if(mcMain.y >= stage.stageHeight - mcMain.height){
    mainJumping = false;
    mcMain.y = stage.stageHeight - mcMain.height;
}

Cu acesta:

//cand personajul atinge podeaua, saritura s-a terminat
//aceasta bucla verifica daca personajul a atins vreun bloc
for(var i:int = 0;i<blockHolder.numChildren; i++){
    //preia blocul curent
    var hitBlock:DisplayObject = blockHolder.getChildAt(i);
    //verifica daca acesta a fost atins si daca personajul 
    //se afla deasupra blocului
    if(mcMain.hitTestObject(hitBlock) && mcMain.y < hitBlock.y){
        mainOnGround = false;
        //termina saritura
        mainJumping = false;
        //modifica coordonatele personajului astfel incat 
        //acesta sa fie deasupra blocului
        mcMain.y = hitBlock.y - mcMain.height;
        //iesim din bucla
        break;
    }
}

In partea ce urmeaza trebuie sa faci in asa fel incat personajul sa cada atunci cand nu e pe un bloc. Mai intai, defineste o variabila booleana mainOnGround in partea de sus initializeaz-o cu false. Daca mcMain loveste un bloc in functia mainJump, seteaza variabila ca true. Sper ca nu e nevoie sa te invat cum. Mergi mai departe si adauga urmatorul cod la moveChar():

//verifica daca personajul se afla pe sol
//parcurge din nou bucla pentru a verifica daca a atins vreun bloc
for(var i:int = 0;i<blockHolder.numChildren; i++){
    //preia blocul curent
    var hitBlock:DisplayObject = blockHolder.getChildAt(i);
    // verifica daca acesta a fost atins si 
    //daca personajul se afla deasupra blocului
    if(mcMain.hitTestObject(hitBlock) && mcMain.y < hitBlock.y){
        //initializam mainOnGround cu true
        mainOnGround = true;
        //iesim din bucla 
        break;
    }
 
    mainOnGround = false;
}
 
//personajul va cadea daca nu se afla pe sol
if(!mainOnGround){
    mainJumping = true;
}

In urmatoarea etapa trebuie sa faci ca personajul sa sara de pe caramizi daca le loveste in partea de dedesubt. In caz contrar el ar reusi sa ajunga in varful caramizilor venind din partea de jos si nu iti doresti asta. Pentru realizarea acestui lucru va trebui sa schimbi bucla "for" din functia mainJump cu:

for(var i:int = 0;i<blockHolder.numChildren; i++){
    //preia blocul curent
    var hitBlock:DisplayObject = blockHolder.getChildAt(i);
    //verifica daca personajul a lovit blocul
    if(mcMain.hitTestObject(hitBlock)){
        //verifica daca personajul se afla in cadere
        if(jumpSpeed>0){
            //daca da, termina saltul
            mainJumping = false;
            //si seteaza-i coordonatele pentru 
            //a se afla deasupra blocului
            mcMain.y = hitBlock.y - mcMain.height;
            //se afla pe un bloc, deci initializam 
            //mainOnGround cu true
            mainOnGround = true;
            //iesim din bucla
            break;
        } else {
            jumpSpeed = Math.abs(jumpSpeed);
            //altfel personajul se indeparteaza de bloc
            mcMain.y = hitBlock.y + hitBlock.height + 1;
        }
 
    }
}
Pagina:
« 1 2 3 »
comenteaza printeaza
Alte tutoriale Adobe Flash:
Noteaza acest tutorial
Rating tutorial
 
(6 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (1) spune-ti parerea
andrey andrey , Sambata, 28 August 2010, ora 21:48
#1

cand pun codul sa sara imi da eroare de cod

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4180
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4085
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Mediu
4084
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4060
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
3875
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
StyleSheet Photoshop SWF Excel COREL DRAW JSON Java Flash Swift 3D Verilog Dreamweaver Python SEO AJAX XHTML HTML Vista Action Script Powerpoint Illustrator Javascript Fotografie XML RoR MySQL Fireworks PHP Lightroom Gimp Sony Vegas CSS Word PSD Ruby on Rails Outlook Bridge
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software