Azionare un movimento

di il
2 risposte

Azionare un movimento

Salve, premetto che di esercizi simili a questo ne è pieno il web e posso dire di averli letti quasi tutti. Pur sembrando praticamente uguale, il mio codice non funziona. Sicuramente c'è qualcosa che non riesco a capire e per cui ho bisogno di una mano.

In pratica parliamo di un'animazione. Ho quindi un frame e un pannello per il disegno. Ho inoltre due variabili, una per le coordinate x e una le y. Per ogni coppia (x,y) ho un metodo che disegna, sul mio pannello, una pallina. Ho, inoltre, una variabile "char direzione= 'D' ". Questa è inizializzata verso destra e poi, a seconda dell'inserimento da tastiera, cambia valore e quindi cambia anche il verso del movimento. Adesso, ancor prima di inserire l'input da tastiera, ho avviato il mio programma e, avendo inizializzato la direzione verso destra, dovrei avere che la pallina scorre in questo verso sul mio pannello. Eppure questa è ferma immobile. Non riesco a capire quale sia il problema, allego codice.
public void disegna() {
		BoardPanel pannello = getBoardPanel();

		x = (int)(Math.random() * righe);
		y = (int) (Math.random() * colonne);
			
		pannello.drawOval(x, y, Color.BLUE);
		pannello.repaint();	
		}
	}
	
	public void move() {
		
		if(direzione == 'D') {
			y += size;
			x += size;
		}
		
		
	}

	@Override
	protected void animateInit() {
		disegna();
		setAnimationDelay(500);
	}

	@Override
	protected void animateNext() {
		BoardPanel pannello = getBoardPanel();
		move();
		pannello.repaint();
	}
Qualcuno sa aiutarmi? Sono tre giorni che non faccio altro che sistemare questa funzione, invano

2 Risposte

  • Re: Azionare un movimento

    Javadente ha scritto:


    allego codice.
    Qualcuno sa aiutarmi? Sono tre giorni che non faccio altro che sistemare questa funzione, invano
    Per poter rispondere bene bisogna prima chiarire delle cose. Innanzitutto, quale è il framework coinvolto: AWT, Swing o altro? (presumerei Swing)
    Si vede nel codice l'override di due metodi, animateInit e animateNext. Chi invoca questi due metodi? È stata realizzata una qualche architettura particolare "a monte" (in una superclasse)? Se sì, va spiegata, perché non la possiamo conoscere.
    Cosa è BoardPanel? E perché sul BoardPanel invochi un drawOval? Chi ha "in mano" (e da dove arriva) il Graphics del componente su cui disegni?
  • Re: Azionare un movimento

    Si, hai ragione, scusa.
    [/quote]
    Per poter rispondere bene bisogna prima chiarire delle cose. Innanzitutto, quale è il framework coinvolto: AWT, Swing o altro? (presumerei Swing)
    [/quote]
    Il framework è Swing.
    [/quote]

    Si vede nel codice l'override di due metodi, animateInit e animateNext. Chi invoca questi due metodi? È stata realizzata una qualche architettura particolare "a monte" (in una superclasse)? Se sì, va spiegata, perché non la possiamo conoscere.
    [/quote]
    Supponiamo di chiamare la classe in cui avviene il disegno e lo spostamento "main". La classe main estende una classe (tastieraAnime) che a sua volta ne estende un'altra(Anime) (non posso modificarle, quindi non devo lavorare sul semplificare questo).
    Anime si preoccupa di definire i due metodi di cui sopra. Il primo serve per per inizializzare l'animazione mentre il secondo per definire i diversi step. Sono due metodi abstract quindi devo definirli io.
    tastieraAnime aggiunge al precedente, un metodo che traduce l'informazione ricevuta premendo un tasto in azione utile per il programma(ma questo per il momento è secondario).
    [/quote]

    [/quote]
    Cosa è BoardPanel? E perché sul BoardPanel invochi un drawOval? Chi ha "in mano" (e da dove arriva) il Graphics del componente su cui disegni?
    [/quote]

    BoardPanel è una classe che estende JPanel, anche questa immodificabile, che permette di disegnare su un pannello grafico, nonchè di eseguire operazioni di base come ridimensionarlo e simili..
Devi accedere o registrarti per scrivere nel forum
2 risposte