# Wie in einer anderen "nicht canvas" klasse zeichne



## MiMij (17. Okt 2007)

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:

```
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:


```
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?


----------



## The_S (17. Okt 2007)

Graphics holen und darauf zeichnen war schon immer böse, und ist auch weiterhin in J2ME böse.

Warum setzt du der Screen Klasse nicht Parameter (z. B. Rectangle oder Point), die genau beschreiben ab wo und ggf. bis wohin gezeichnet werden soll!?


----------



## MiMij (17. Okt 2007)

Was heisst boese? Macht man das net, oder ist das so schwierig?

Das problem is ja, das ich in der Screen klasse nur das aktuelle Bild hab. Un in der Scroll Klasse soll das Scrollen passiern. D.h. das in der Screen klasse, nicht das neue bild bekannt ist, solange bis der uebergang zuende ist, und ich das alte mit dem neuen ersetze.

Wie genau meinst du das mit den Parameter setzen?


----------



## The_S (17. Okt 2007)

Böse heißt, dass man das nicht macht - zumindest wenn man nicht 100%ig weiß, was man tut ;-) .

Naja, du sagst deiner Screen Klasse (über den Scroller), dass er ab der und der Position zeichnen soll und rufst anschließend ein repaint auf. Viel ist das nicht


----------



## MiMij (17. Okt 2007)

Naja ich kann vllt festsetzen, wo er das aktuelle Bild zeichnen soll. (du meinst sicher mit diesem setClip) Aber dann kann ich das neue Bild doch net zeichnen?


----------



## MiMij (17. Okt 2007)

Also, mein Problem war, das ich gesagt hab 

```
screen.setCurrentImage(newImage);
```

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


----------

