Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Script Blocca Gioco Navicella e nemici

    Ciao a tutti,

    sto realizzando un giochino tipo guerre stellari, finora ciò che sono riuscito a fare è:
    la nave che si muove nello stage
    lo sparo
    i nemici random e la collisione
    e ad incrementare una variabile per il punteggio.

    Non essendo un grande ActionScripter mi sono servito di un tutorial che mi è stato consigliato da un amico qui del forum per la precisione l'articolo è questo (che ha diversi articoli correlati):


    http://www.sastgroup.com/leggi-tutor...ale%20(parte1)

    Adesso per chiarezza vado a riassumere in breve come ho sistemato gli oggetti nello stage e quali script ho associato loro.

    Bene nel primo frame del filmato ho questo codice:

    codice:
    numEnemy=10;
    attesa=6000; //6 sec
    creanemico();
    
    function creanemico() {
    intervallo = setInterval(pausa,attesa);
    function pausa() {
    nexT();
    }
    }
    
    function nexT(){
    for (i=1; i<=numEnemy; i++){
    nemico.duplicateMovieClip( "nemico"+i, i );
    }
    creanemico();
    }
    ho creato un clip chiamato "nave" che corrisponde alla navicella del giocatore a questa ho associato questo script:
    codice:
    onClipEvent(load){
    speed=20; //velocita navicella
    _root.palla._visible=false; //nasconde la pallottola
    counter=1; //numero spari utile per duplicare movieclip
    }
    
    onClipEvent (enterFrame) {
    speed=20;
    if (Key.isDown(Key.RIGHT)) {
    this._x+=speed;
    } 
    else if (Key.isDown(Key.LEFT)) {
    this._x-=speed;
    }
    if (Key.isDown(Key.DOWN)) {
    this._y+=speed;
    }
    else if (Key.isDown(Key.UP)) {
    this._y-=speed;
    }
    else if (Key.isDown(Key.SPACE)) { 
    counter++;
    _root.palla.duplicateMovieClip( "palla"+counter,counter );
    _root["palla"+counter]._visible=true;
    } 
    }
    Ho creato un altro movie clip che ho chiamato "palla" che corrisponde allo sparo della navicella a cui ho associato questo codice:
    codice:
    onClipEvent (load) {
    speed=10; //velocita della pallottola
    this._y=_root.nave._y-30; //-30 perchè allineo la pallottola alla punta della nave
    this._x=_root.nave._x;
    }
    
    onClipEvent (enterFrame) {
    this._y-=speed; //fa muovere verso l'alto
    if (this._y<=0){ //appena arrriva alla fine dello schermo
    this.removeMovieClip(); //toglilo dallo schermo
    }
    
    //collisione col nemico
    for (i=1; i<=_root.numEnemy; i++){
    if (this.hitTest( _root["nemico"+i])){ //collisione col nemico
    _root.punteggio+=100; //punteggio
    //_root["enemy"+i].gotoAndPlay( 2 ); //fa vedere la distruzione
    removemovieclip(_root["nemico"+i]); //elimima da stage
    }
    }
    }
    poi ho creato un altro movie clip che ho chiamato "nemico" che corrisponde alle navicelle aliene a cui ho associato il codice:
    codice:
    onClipEvent (enterFrame) {
    this._y+=enemySpeed;
    if (this._y>=800) { //supera la dim massima del mio stage di esempio
    reset();
    }
    }
    onClipEvent (load) {
    function reset(){
    this._x=random(800); 
    this._y=random(0); 
    enemySpeed=random(6)+1;
    }
    reset();
    }
    in ultimo dopo aver creato una variabile nel primo frame del filmato con questa dicitura:
    codice:
    var punteggio=0;
    ho creato una casella di testo con nome variabile punteggio (ovviamente)

    per dovere devo anche fare la premessa che ho usato un frame rate abbastanza alto affinchè le animazioni vengano piuttosto fluidi pari a 30 fr/s.

    Problema 1:
    Il gioco sembra tuttosommato funzionare se non fosse per il fatto che ad un certo punto si blocca, la prima cosa che mi è venuta in mente è stata quella di abbassare la frequenza dei fotogrammi a 15 (risultato=animazioni scattose) ma il problema persiste. Così penso che magari dipenda da qualche ciclo o da qualche script maligno (tra quelli citati sopra perchè altri non ce ne sono).


    Problema 2:
    Se avete dato un'occhiata al primo codice ovvero quello che s trova sul primo frame della timeline principale vi accorgerete che il clip nemico viene duplicato random per 10 volte ogni 6 secondi e questo funziona solo che mi carica anche un undicesimo nemico a cui non viene applicata la proprietà hitest quindi non gli si può sparare e questo ciclicamente ogni 6 secondi perchè ripeto ogni 6 secondi i nemici vengono duplicati.

    Spero che possiate aiutarmi ho speso diverso tempo a fare questa cosa e spero di poterla portare al termine.

    Vi ringrazio anticipatamente per aver letto fin qui

  2. #2
    io non ho guardato il codice per intero non ne ho il tempo

    ma prova a chiudere l'intervallo di tempo

    codice:
    numEnemy=10;
    attesa=6000; //6 sec
    creanemico();
    
    function creanemico() {
    intervallo = setInterval(pausa,attesa);
    function pausa() {
    nexT();
    }
    clearInterval(intervallo);
    }
    
    function nexT(){
    for (i=1; i<=numEnemy; i++){
    nemico.duplicateMovieClip( "nemico"+i, i );
    }
    creanemico();
    }
    magari ho anche detto una fagianata
    Consulenza aziendale a 360° http://www.gruppodg.it http://www.gruppodg.it/3d
    Realizzazione siti internet, Siti Flash, Ricerca Location per bar negozi , esercizi commerciali, sviluppo pratiche e allestimento

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    306
    mi sa che l'undicesimo nemico è in realtà l'originale che non viene gestito dallo script, prova a bloccarla fuori dallo stage, in modo da renderla invisibile, attento a non eliminarla, altrimenti non potrai più riferirti a quella per fare i duplicati
    buonuomo.tomma@tiscali.it

  4. #4
    x enigma79

    ho messo pulisci intervallo nella posizione che mi hai consigliato però in questa maniera il nemico non viene più duplicato..
    pensi che dovrei mettere il clearinterval in un'altra posizione?

    Grazie cmq



    x il guccino

    Facendo la premessa che il clip "nemico" già si trovava al di fuori dello stage mi sono permesso di dargli una trasparenza alpha=0%
    il risutato è stato che anche tutti i nemici duplicati mi sono diventati a tutti gli effetti trasparenti, cioè ci sono, ma non s vedono..

    Non mi abbandonate ragazzi.. grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    306
    onClipEvent (enterFrame) {
    if(this._name != nemico){//il nome del clip originale
    this._y+=enemySpeed;
    if (this._y>=800) { //supera la dim massima del mio stage di esempio
    reset();
    }
    }
    onClipEvent (load) {
    function reset(){
    this._x=random(800);
    this._y=random(0);
    enemySpeed=random(6)+1;
    }
    reset();
    }
    }
    lo script fa tutto il suo lavoro se il clip in questione non è l'originale
    non ho mai usato la proprietà name in uno script, spero funzioni!
    buonuomo.tomma@tiscali.it

  6. #6
    ho provato il codice che mi hai detto e cioè questo:

    codice:
    onClipEvent (enterFrame) { 
    if(this._name != nemico){//il nome del clip originale 
    this._y+=enemySpeed; 
    if (this._y>=800) { //supera la dim massima del mio stage di esempio 
    reset(); 
    } 
    } 
    }
    onClipEvent (load) { 
    function reset(){ 
    this._x=random(800); 
    this._y=random(0); 
    enemySpeed=random(6)+1; 
    } 
    reset(); 
    }
    purtroppo è sempre uguale l'undicesimo c'è ed è indistruttibile

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    306
    scusa, dimentico sempre che le stringhe vanno tra virgolette
    onClipEvent (enterFrame) {
    if(this._name != "nemico"){//il nome del clip originale tra virgolette
    this._y+=enemySpeed;
    if (this._y>=800) { //supera la dim massima del mio stage di esempio
    reset();
    }
    }
    }
    onClipEvent (load) {
    function reset(){
    this._x=random(800);
    this._y=random(0);
    enemySpeed=random(6)+1;
    }
    reset();
    }
    buonuomo.tomma@tiscali.it

  8. #8
    Originariamente inviato da ilGuccino
    scusa, dimentico sempre che le stringhe vanno tra virgolette
    onClipEvent (enterFrame) {
    if(this._name != "nemico"){//il nome del clip originale tra virgolette
    this._y+=enemySpeed;
    if (this._y>=800) { //supera la dim massima del mio stage di esempio
    reset();
    }
    }
    }
    onClipEvent (load) {
    function reset(){
    this._x=random(800);
    this._y=random(0);
    enemySpeed=random(6)+1;
    }
    reset();
    }

    Mitico!!

    l'unica cosa degne di nota è che mi rimane la punta della astronave nemica in alto al centro dello stage, ad ogni modo chi se ne infischia!

    GRazie un botto!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    306
    mettila più in alto, o rendila invisibile se si chiama "nemico"
    (anche se non so se lo script riesce a duplicarla se è invisibile...)
    buonuomo.tomma@tiscali.it

  10. #10
    Grazie il guccino
    Il fatto è che io il clip nel mio stage di lavoro ce l'ho in basso a destra e lui me lo fa vedere un pezzettino in alto al centro, ma questo non è che mi porti molto disappunto..

    il problema serio che avevo posto fin dall'inizio e che purtroppo è ancora presente è che dopo un tot che sono li a giocare il player si blocca!!

    Non è che una buon anima mi sa dire il perchè si blocca? :master:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.