Wie mit den Graphics aus anderer Klasse zeichnen? (J2ME)

MiMi

Erfahrenes Mitglied
Also zu meinem Problem:
Ich hab eine Klasse Screen die erbt von Canvas. Hat demnach auch eine Paint methode. Diese Klasse hat ein aktuelles Image. Jetzt will ich in ner anderen Klasse, der ScrollKlasse, nen Scrolleffekt sozusagen machen. Diese Klasse hat das neue Bild. Und das ganze Scrollzeug soll auch in diese Klasse. Jetzt dacht ich mir ich hol in der SCroll klases die graphics aus der Screen Klasse und das aktuelle Bild. Dann versetz ich die immer um nen Stueck (lass sie scrollen in nem Thread) und sag dann immer zu der Scroll klasse repaint. Am ende ersetz ich dann das aktuelle Bild in der Screen Klasse mit dem neuen aus der Scroll Klasse

Klasse Screen:
Code:
	public Screen (Main main) {
		this.main = main;
		this.display = Display.getDisplay(main);
		width = getWidth();
		height = getHeight();
		currentImage = Image.createImage(width, height);
	}

[...]

	public synchronized void paint (Graphics g) {
		int clipX = g.getClipX();
		int clipY = g.getClipY();
         g.drawRegion(currentImage, clipX, clipY, currentImage.getWidth(), currentImage.getHeight(),
                 Sprite.TRANS_NONE, 0, 0, Graphics.TOP | Graphics.LEFT);
	}

Klasse Scroll:

Code:
	public void start () {
		currentImage = screen.getCurrentImage();
		thread = new Thread(this);
	    thread.start();
	}

[...]

	public void run () {
		while (currentXPosition < width) {
			// ? ?

			currentGraph.drawImage(currentImage, 0,0, Graphics.TOP|Graphics.LEFT);
			//  
			try {
		        synchronized (this) {
		          wait(20);
		        }
		    }catch (InterruptedException e) {
		    	System.out.println("error in try catch ");
		    }
		    currentXPosition += sizeSteps;
		    screen.repaint();
		}
		screen.setCurrentImage(newImage);
	}

Hab jetzt nur mal probiert das aktuelle Bild zu holen und das zu zeichen, aber das macht der nicht. Kann man nicht einfach die Graphics holen und dann zeichen?
 
hi,

also speziel mit JavaMe hab ich noch nicht gearbeitet, jedoch hatte ich ein änliches problem mit dem "großen" Java.
Die Antwort: Repaint wird erst aufgerufen, wenn er Zeit hat und aus irgendeinem Grund fast er alle repaints() zu einem Zusammen. Gelöst habe ich dieses Problem indem ich paintImmediately(x,y,x,y) verwendet habe. Damit zeichnet erauch nur den Gewünschten bereich neu
 
Wie wenn er zeit hat? Ich sag ihm er soll das dann aufrufen, dann hat er das doch auch DANN zu machen?!
Hab beim suchen, bisher nur gefunden, das man repaint aufrufen vermeiden sollte, da es das programm langsam macht ?! (Vorallem auf nem Handy ist das ja wichtig)
 
Ich weiß leider auch nicht genau was repaint() intern macht, allerdings fasst er repaint() Aufrufe in einer Schleife immer zu einem zusammen, egal ob Thread oder nicht. Ich könnte mir vorstellen, dass es am Compiler liegt, um zu verhindern, dass das Programm langsamer wird. paintImmediately(x,y,x,y) scheint intern da anders zu arbeiten.
 
Also wenn man in die API schaut (z.B. http://java.sun.com/j2se/1.5.0/docs...ponent.html#repaint(long, int, int, int, int)) steht da, dass repaint das ganze nur als "dirty" markiert. In der Hilfe zu der Paint-Methode steht, dass man die gar nicht verwenden sollte, weil die paint-Aufrufe halt über repaint gescheduled werden... Soviel zum Thema "wenn er Zeit hat".

paintImmediately kenn ich noch nicht. Was ich bisher immer verwende ist anstelle von repaint ein validate() oder invalidate(). Eins von beiden hat bisher eigentlich immer funktioniert. Aber JavaME kenn ich auch noch nicht :)
 
Hab beides noch nicht gehoert. Und in J2ME scheint es auch kein validate zu geben?! Jedenfalls find ich nichts bei google.
Das problem is ja das ich einfach in der Screen Klasse die beiden Bilder reinnehmen wuerde. Aber das hatte ich beim letzten Versuch schon, und da wurd emir gesagt das kann man net gut ausbreiten, und neue effekte hinzufuegen ;). Und die effekte sollen alle in andere Klassen. Es soll auch noch ein Fade dazukommen zb.
 
hmm, ich hab ja noch nie mit JavaMe gearbeitet, probier unsere Vorschläge erstmal aus, dann sehn wir ja ob JavaMe wircklich so anders ist :)
 
Also, mein Problem war, das ich gesagt hab
Code:
 screen.setCurrentImage(newImage);

Dann wurd das neue Bild in das aktuelle Bild geschrieben
Nur dann hab ich immer noch das alte grafik object ^^
 
Zurück