zyky
22-08-2008, 16:33
salve a tutti!
ho appena cominciato con GTGE, e già il primo giorno ho un problemino...
il programma che voglio fare è semplice:
il player deve evitare delle "palle" che rimbalzano sui muri e tra loro, e cercare di raggiungere l'uscita.
l'unico problema riscontrato fino ad ora è che a volte non compaiono gli Sprite dovuti a vari eventi: ad esempio, quando si finisce un livello, a volte non compare la scritta che indica il livello successivo; oppure quando si supera un livello non carica le nuove "palle" del livello appena raggiunto.
metto qui sotto delle parti di codice che potrebbero essere rilevanti:
labelLivello = new Sprite(getImage("Livello.gif"));
labelLivello.setLocation(180,170);
labelLivello.setBackground(_background);
labelLivello1 = new Sprite(getImage("Livello1.gif"));
labelLivello1.setLocation(380,170);
labelLivello1.setBackground(_background);
indicazioni = new SpriteGroup("Indicazioni");
indicazioni.setBackground(_background);
indicazioni.add(labelLivello);
indicazioni.add(labelLivello1);
labelLivello è solo la scritta "LIVELLO", labelLivello1 invece è l'immagine del numero del livello.
questo è uno degli eventi (nel metodo update(long elapsedTime)) che crea problemi ogni tanto:
// se il gioco è fermo, riavvia il gioco col mouse
if(giocoFermo) {
if(rightClick() || click()) {
labelLivello.setActive(false);
labelLivello1.setActive(false);
inizializzaPezzi();
ostacoliLivello(livello);
giocoFermo = false;
// metto in moto gli ostacoli (le palle)
ostacolo1.setSpeed(0, -0.6);
ostacolo2.setSpeed(-0.4, 0);
ostacolo3.setSpeed(0, -0.5);
ostacolo4.setSpeed(-0.5, 0);
ostacolo5.setSpeed(0, -0.3);
System.out.println("Livello = "+livello);
}
}
qui, se il gioco è fermo, cliccando col mouse il gioco riparte. inizializzaPezzi() fa solo il setLocation(double, double) dei vari ostacoli e bordi. credo che a dar problemi sia il metodo ostacoliLivello(int livello), che non attiva correttamente le "palle" (ostacoli).
ecco il codice del metodo ostacoliLivello(int livello)
public void ostacoliLivello(int livello) {
if(livello==1) {
ostacolo1.setActive(true);
ostacolo2.setActive(true);
ostacolo3.setActive(false);
ostacolo4.setActive(false);
ostacolo5.setActive(false);
// posiziono il player
_sprite.setLocation(25, 25);
}
else if(livello==2) {
ostacolo1.setActive(true);
ostacolo2.setActive(true);
ostacolo3.setActive(true);
ostacolo4.setActive(true);
ostacolo5.setActive(false);
// posiziono il player
_sprite.setLocation(25, 25);
}
else if(livello==3) {
ostacolo1.setActive(true);
ostacolo2.setActive(true);
ostacolo3.setActive(true);
ostacolo4.setActive(true);
ostacolo5.setActive(true);
// posiziono il player
_sprite.setLocation(25, 25);
}
System.out.println("Livello = "+livello);
attiva le "palle" del livello e posiziona il player nel posto d'inizio.
a volte queste "palle" non vengono aggiornate, e anche se il livello aumenta (controllato con System.out.println()) le palle rimangono le stesse. ho controllato anche il tutti gli Sprite e li segna come "attivi", ma non si vedono...
lo stesso capita nella collisione tra Player e "palle", infatti qui A VOLTE non visualizza le immagini "LIVELLO X". quando il player viene colpito il gioco si ferma e "attiva" le immagini del livello corrente.
class CollisionePallePlayer extends BasicCollisionGroup {
public void collided(Sprite s1, Sprite s2) {
MyGame3.ostacolo1.setSpeed(0,0);
MyGame3.ostacolo2.setSpeed(0,0);
MyGame3.ostacolo3.setSpeed(0,0);
MyGame3.ostacolo4.setSpeed(0,0);
MyGame3.ostacolo5.setSpeed(0,0);
MyGame3.giocoFermo = true;
MyGame3.labelLivello.setActive(true);
MyGame3.labelLivello1.setActive(true);
}
}
scusate la lunghezza..
avete idea del perchè a volte non riesco a vedere le "palle" o il livello?
forse le faccio comparire/scomparire nel modo sbagliato?
grazie
ps: ho problemi anche a fare il file.jar. in genere non ho problemi, ma ora che ho usato GTGE mi dice che non trova la "main class"
ho appena cominciato con GTGE, e già il primo giorno ho un problemino...
il programma che voglio fare è semplice:
il player deve evitare delle "palle" che rimbalzano sui muri e tra loro, e cercare di raggiungere l'uscita.
l'unico problema riscontrato fino ad ora è che a volte non compaiono gli Sprite dovuti a vari eventi: ad esempio, quando si finisce un livello, a volte non compare la scritta che indica il livello successivo; oppure quando si supera un livello non carica le nuove "palle" del livello appena raggiunto.
metto qui sotto delle parti di codice che potrebbero essere rilevanti:
labelLivello = new Sprite(getImage("Livello.gif"));
labelLivello.setLocation(180,170);
labelLivello.setBackground(_background);
labelLivello1 = new Sprite(getImage("Livello1.gif"));
labelLivello1.setLocation(380,170);
labelLivello1.setBackground(_background);
indicazioni = new SpriteGroup("Indicazioni");
indicazioni.setBackground(_background);
indicazioni.add(labelLivello);
indicazioni.add(labelLivello1);
labelLivello è solo la scritta "LIVELLO", labelLivello1 invece è l'immagine del numero del livello.
questo è uno degli eventi (nel metodo update(long elapsedTime)) che crea problemi ogni tanto:
// se il gioco è fermo, riavvia il gioco col mouse
if(giocoFermo) {
if(rightClick() || click()) {
labelLivello.setActive(false);
labelLivello1.setActive(false);
inizializzaPezzi();
ostacoliLivello(livello);
giocoFermo = false;
// metto in moto gli ostacoli (le palle)
ostacolo1.setSpeed(0, -0.6);
ostacolo2.setSpeed(-0.4, 0);
ostacolo3.setSpeed(0, -0.5);
ostacolo4.setSpeed(-0.5, 0);
ostacolo5.setSpeed(0, -0.3);
System.out.println("Livello = "+livello);
}
}
qui, se il gioco è fermo, cliccando col mouse il gioco riparte. inizializzaPezzi() fa solo il setLocation(double, double) dei vari ostacoli e bordi. credo che a dar problemi sia il metodo ostacoliLivello(int livello), che non attiva correttamente le "palle" (ostacoli).
ecco il codice del metodo ostacoliLivello(int livello)
public void ostacoliLivello(int livello) {
if(livello==1) {
ostacolo1.setActive(true);
ostacolo2.setActive(true);
ostacolo3.setActive(false);
ostacolo4.setActive(false);
ostacolo5.setActive(false);
// posiziono il player
_sprite.setLocation(25, 25);
}
else if(livello==2) {
ostacolo1.setActive(true);
ostacolo2.setActive(true);
ostacolo3.setActive(true);
ostacolo4.setActive(true);
ostacolo5.setActive(false);
// posiziono il player
_sprite.setLocation(25, 25);
}
else if(livello==3) {
ostacolo1.setActive(true);
ostacolo2.setActive(true);
ostacolo3.setActive(true);
ostacolo4.setActive(true);
ostacolo5.setActive(true);
// posiziono il player
_sprite.setLocation(25, 25);
}
System.out.println("Livello = "+livello);
attiva le "palle" del livello e posiziona il player nel posto d'inizio.
a volte queste "palle" non vengono aggiornate, e anche se il livello aumenta (controllato con System.out.println()) le palle rimangono le stesse. ho controllato anche il tutti gli Sprite e li segna come "attivi", ma non si vedono...
lo stesso capita nella collisione tra Player e "palle", infatti qui A VOLTE non visualizza le immagini "LIVELLO X". quando il player viene colpito il gioco si ferma e "attiva" le immagini del livello corrente.
class CollisionePallePlayer extends BasicCollisionGroup {
public void collided(Sprite s1, Sprite s2) {
MyGame3.ostacolo1.setSpeed(0,0);
MyGame3.ostacolo2.setSpeed(0,0);
MyGame3.ostacolo3.setSpeed(0,0);
MyGame3.ostacolo4.setSpeed(0,0);
MyGame3.ostacolo5.setSpeed(0,0);
MyGame3.giocoFermo = true;
MyGame3.labelLivello.setActive(true);
MyGame3.labelLivello1.setActive(true);
}
}
scusate la lunghezza..
avete idea del perchè a volte non riesco a vedere le "palle" o il livello?
forse le faccio comparire/scomparire nel modo sbagliato?
grazie
ps: ho problemi anche a fare il file.jar. in genere non ho problemi, ma ora che ho usato GTGE mi dice che non trova la "main class"