# "fließender Bildschirm"



## Cyrix (9. Feb 2006)

hey leute,
also ich will eigentlich nur ein Spiel programmieren! das Problem ist jedoch das man vorher nicht weiss wie sich das ganze ausbreitet... also ein normales Fenster ist zu klein! JEtzt ist die Frage ob man mit Java sozuasgen einen "fließenden bildschirm" proggen kann? also ich meine damit, dass man nach rechts/links oben/unten scrollen kann. ist sowas möglich? Kann man dann auch ein BIld als hitnergrund nehmen über das man sozusagen drüber slided?
schonmal vielen dank für eure mühe & antworten!!!
mfg cyrix


----------



## 0xdeadbeef (9. Feb 2006)

Klar geht das, nennt man üblicherweise "Scrolling".

Die einfachste Methode ist folgende:


```
offGraphics.setClip(0,0,w,h);
offGraphics.drawImage(bgImage, 0, 0, w, h, xOfs, 0, xOfs+w, h, this);
```

Das ist aus einem Spiel, das nur seitlich scrollen kann. "bgImage" ist ein sehr breites Image, in dem der gesamte Level abgelegt ist (3200 Pixel breit). In jedem "paint"-Zyklus wird nun ein Stück der Breite w und der Höhe h ab Position x=xPos und y=0 aus diesem Bild ausgenschnitten, und bei den Koordinaten 0,0 in "offGraphics" eingefügt. Das ist der Puffer, in dem ich das Bild zusammenbaue, bis er am Schluß in einem Rutsch in den aktuellen Bildschirm kopiert wird:


```
g.drawImage(offImage,0,0,null);
```

In meinem Fall geht es gar nicht anders, aber bei den meisten Jump&Runs besteht der Level aus "Tiles", also kleinen Rechtecken oder Quadraten, die sich nicht überlappen. Dann ist es besonders für sehr große Levels geschickter, immer nur den Teil des Levels aus Tiles neu zu zeichnen, der gerade zu sehen sein soll.

Und noch ein Tip: beim Erzeugen der Images für Tiles,  Level und Screenbuffer sollte man immer wie folgt vorgehen:


```
GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
		BufferedImage bImg = gc.createCompatibleImage(img.getWidth(null), img.getHeight(null), transparency);
```

In diesem Fall wird aus einem vorhandenen "normalen" Image namens "img" ein hardwarebeschleunigtes BufferedImage namens "bImg" erzeugt. Das beschleunigt das Kopieren von Grafiken enorm...


----------



## Cyrix (9. Feb 2006)

ok vielen dank für die Hilfe!!!


----------



## Cyrix (10. Feb 2006)

hey
also ich hab das mit dem Bild mal versucht. Dann ist mir jedoch aufgefallen das das mit den Tiles eigentlich auch bei meinem Spiel funktionieren müsste:
bei dem spiel wird sozusagen eine landkarte aus einzelnen quadratischen karten zusammengesetzt. Am anfang liegt in der mitte eine karte und die einzelnen spieler müssen da dann halt drumherum bauen.
Das müsste dann doch eigentlich auch mit diesen tiles funktionieren oder? wenn ja könntest du mir dann vll noch mal genauer erklären wie ich ein einzelnes tile erstelle und daraus dann ein bild zusammen setze? KAnn ich ein einzelnes tile verändern oder muss ich dann alle neu zeichnen?
mfg&thx


----------



## Soulfly (10. Feb 2006)

Wenn animation darauf läuft muss sowieso fast alles neugezeichnet werden. Aber ja es geht natürlich.
Du solltest nur bedenken. Das du nur sichtbare Tiles zeichnest.
Zum Aufbau: Du könntest ein 2d-Array erstellen und dort meinetwegen integer-Identifkator für tile dort drin speichern.

0: Nichts
1: Wand
2: Gras

111111100
122222100
122222100
122222111
122112221
122112221
122222221
111111111

z.b

MfG
Soulfly


----------



## Cyrix (10. Feb 2006)

hey
also da ich keine animationen hab sollte das kein problem sein. Bei meinem spiel handelt es sich naemlich nicht um ein jump&run spiel sondern umso eine art Siedler von catan. so das ich halt nur neue karten legen muss, bzw einer karte entwas hinzufuegen!!
also vielen dank. das mit dem array ist eine gute idee!


----------



## mlange8801 (10. Feb 2006)

Hier gibts ein ziemlich gutes Tutorial für tile-based worlds:
www.gotoandplay.it/_articles/2004/02/tonypa.php
Ist allerdings an Flash ausgerichtet, läßt sich aber imho auch ganz gut auf java übertragen...


----------

