- Home
- Categorie
- Digital Marketing
- Grafica, Visual Design & UX
- [Risolto] Collisione
-
[Risolto] Collisione
Sono un programmatore novello, sto cercando di creare in piccolo videogame con Flash.
Sto cercando di far muovere un quadrato nello schermo e vorrei che quando quest?ultimo arriva contro un rettangolo (posto più in basso) si ferma sopra e non lo oltrepassa (cioè le uniche operazioni possibili devono essere movimento asse x e movimento asse y solo verso l?alto quando il quadrato impatta contro il rettangolo)
Ho provato con il codice :
onClipEvent (enterFrame) {
if (this._y >= _root.Terra._y) { this._y = _root.Terra._y }}
associate al Clip filmato Quadrato ma nulla da fare, quando lo muovo questo oltrepassa il rettengolo che per comodità ho chiamato Terra.
Cosa sbaglio?Inserisco di seguito tutto il codice associato al Clip filmato Quadrato.
onClipEvent (load) {
//assegnamo un valore alla variabile velocita
velocita=10;}//Voglio fare in modo che il quadrato non oltrepassi il rettangolo
onClipEvent (enterFrame) {
if (this._y >= _root.Terra._y) { this._y = _root.Terra._y }}//faremo eseguire questa istruzione ad ogni fotogramma (in modo continuo)
onClipEvent (enterFrame) {
if (Key.isDown(Key.UP)) {
this._y = this._y - velocita;
} else if (Key.isDown(Key.LEFT)) {
//se è premuto il tasto sinistra, sposteremo l'aereo a sinistra, e cosi via...
this._x = this._x - velocita;
} else if (Key.isDown(Key.DOWN)) {
this._y = this._y + velocita;
} else if (Key.isDown(Key.RIGHT)) {
this._x = this._x + velocita;
}
}
-
Ciao Marco 756 e benvenuto nel forum GT
Innanzitutto il tuo errore principale è scrivere codice sulle MovieClip, l' ho detto 1000 volte e non mi stancherò mai di dirlo.
Dovresti scrivere il codice solo sulla timeline.
Personlmente non do più aiuti su quel tipo di codice. Ci vuole troppo tempo per capire la logica dell' applicazione scrivendo codice sparso.
Forse Onsitus o qualche altro utente può darti una mano.
-
Grazie per avermi risposto, ora sposterò la mia attenzione sull'inserimento di codice nella timeline.
Cmq non penso di aver chiesto niente di così difficile.
Magari la risoluzione di questo piccolo problema mi avrebbe aiutato a comprendere meglio l'ActionScript.
-
Buongiorno Marco e benvenuto sul forum GT.;)
Prova cosi:
onClipEvent (load) { velocita = 10; } onClipEvent (enterFrame) { if (this._y<_root.Terra._y) { if (Key.isDown(Key.DOWN)) { this._y = this._y+velocita; } } if (Key.isDown(Key.UP)) { this._y = this._y-velocita; } if (Key.isDown(Key.LEFT)) { this._x = this._x-velocita; } if (Key.isDown(Key.RIGHT)) { this._x = this._x+velocita; } }
-
Ho provato ad associare questo codice al Clip filmato Quadrato, ma non risponde al comando down (gli altri invece funzionano). In qualsiasi parte dello schermo posiziono il Quadrato, quando poi faccio il "Prova filmato" questo non si sposta verso il basso. Eppure questo codice sembra essere quello giusto!?!
-
Strano, l'unica cosa che posso pensare e che il _y del clip filmato quadrato e gia piu grande che _root.Terra._y, per quello non si muove.
Controlla nel clip filmato quadrato, che la forma quadratto sia con un punto di registrazione al centro (o in alto) e non in giro daqualche altra parte con un 'silly' _y.:bho:
Un altra prova per capire se e quello il problema aggiunge nel 'enterFrame un trace(this._y); per vedere dove si trova esatamente.
-
Strano, l'unica cosa che posso pensare e che il _y del clip filmato quadrato e gia piu grande che _root.Terra._y, per quello non si muove.
Forse è qua il problema.
Come faccio a mettere due clipfilmato uno più piccolo dell'altro?
Ho provato con il clipQuadrato come istanza del clipTerra e ho provato a mettere le due clip su livelli diversi, ma niente da fare il comando down non funziona.I punti di registrazione mi compaiono dentro alle aree degli oggetti.
Cosa intendi per "con un 'silly' _y" e agiiungere nel 'enterFrame un trace(this._y)?
Il this._y non c'è già nel codice che mi hai dato?
-
Aggiunge nel enterFrame...
trace(this._y);
Quando fa il preview del filmato, uscira fuori la finestra di output con il valore del fimato quadrato._y (this._y). Cosi vede se e quello il problema.
Davero puo fare...
trace(this._y); trace(_root.Terra._y);
In caso sia il Terra._y sbagliato
Il codice l'ho provato e funziona.:bho:
-
Innanzitutto GRAZIE per l'aiuto che mi stai dando.:)
Sono un novello e molte cose ancora le devo imparare.Scrivendo i trace (trace(this._y); e trace(_root.Terra._y);) nell'enterframe ottengo questo messaggio di output:
0
undefinedNon capisco perchè non riesca a riconoscere il simbolo clip filmato che ho chiamato terra.
Riassumo le poche operazioni che ho fatto per capire una volta per tutte perchè nn funziona:- Disegno sull'enterframe due oggetti e li trasformo in simbolo clip filmato, uno chiamato Quadrato e l'altro Terra;
- Aggiungo il codice che mi hai postato al simbolo clip filmato Quadrato;
- Aggiungo i trace all'enterframe.
Cosa sbaglio?
-
Ha dato un nome d'istanza al clip filmato Terra???:?
Ti allego un esempio cmq (per flash
-
E' incredibile i due filmati sono identici, ma uno funziona e l'altro no.
Ma scusa il nome Terra come glielo dai?
Perchè ho notato che se apri la libreria nel tuo file i due simboli hanno questi nomi:
Symbol 1
Symbol 2
Invece se lo seleziono nel pannello delle azioni compare Terra in basso a sinistra.Non ci capisco più niente............:x
-
Ti mando il filmato....
-
Risolto...........
Non avevo scritto il nome Terra nelle proprietà del simbolo.
Pensavo che una volta creato e nominato il simbolo fosse visibile a flash con il proprio nome e invece...
Grazie per avermi aiutato
Ciao