Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.11.2014, 21:41

Tilemap Editor, Raster zeichnen, wie genau?

Hallo alle zusammen,

ich versuche gerade einen kleinen Tilemap-Editor zu schreiben. Leider komme ich nicht weiter.
Und zwar ist es bei mir so, dass ich zurzeit einfach eine Liste verwende, die alle Tile-Objekte trägt. Jedes Tile-Objekt trägt ein Image.
Ich iteriere dann über die liste und lasse alle images dann "aneinanderreihen". Damit ich die überhaupt optisch trennen kann, trägt jedes Objekt ein "defualt" image, das je nach Position entweder weiß ist, oder grau ist. Die Zuordnung per mausklick, also welches Tile eigentlich hinter dem Image steht, hole ich mir über das Image selbst, das aber irgendwie noch nicht perfekt funktioniert.

Insgesamt habe ich das Gefühl, dass ich auf einem Holzweg bin. Ich hätte viel lieber so wie beim bekannten Tiled Editor, dass ich ein echtes Raster habe, dessen Linien meine Bilder exakt treffen. Leider verstehe ich überhaupt nicht, wie so ein gestricheltes Raster funktioniert. Würde ich sowas selbst zeichnen als Linie und dann als image laden, dann habe ich ja immer zwei Linien bei jedem Tile. Beim Tiled Editor habe ich irgendwie das Gefühl, dass das was ist, was mit den Images der Tile-Objekte gar nichts zu tun hast, sondern ein "wirklich echtes Raster", das sieht man irgendwie am Verhalten wenn man zoomt. Die Striche werden dann "Mehr" oder weniger, was ich schon sehr cool finde.

http://cdn2.raywenderlich.com/wp-content…pawn-point1.jpg


Soetwas würde ich auch gerne machen.

Aber leider weiß ich gar nicht, was das ist, dementsprechend fällt es mir schwer, dafür z. B. in Java eine Möglichkeit zu finden.
Außerdem ist mir auch nicht klar, wenn ich so ein Raster zeichnen lassen, wie ich die "Inhalte" was ja so erstmal nur leerräume sind, dann meinem Tile-Objekt zuordne.

Kann mir da jemand ein paar Denkanstöße geben?

Viele Grüße

Mori

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

20.11.2014, 22:54

Einfach direkt Linien zeichnen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

20.11.2014, 23:28

Du kannst doch deine Tiles rendern und darüber renderst du dann dein Raster. Entweder machst du eine Grafik von einem Rahmen die in der Mitte durchsichtig ist und renderst über jedes Tile diese Grafik, wobei die Linien dann mit skalieren würden, oder du machst dir eine Grafik von einer Linie und renderst die Über die Schnittkanten der Tiles. Wo diese sind musst du dir dann berechnen. Du kennst ja an sich die Größe und die Position der Tiles und mehr brauchst du eigentlich schon nicht mehr. Mit Zoom kommt dann natürlich noch der Zoomfaktor hinzu, wobei ich das erst mal weg lassen würde. Je nachdem womit du genau arbeitest hat die Engine vielleicht auch schon eine Funktion um Linien zu zeichnen. Dann kannst du diese natürlich direkt benutzen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

4

21.11.2014, 12:34

Hallo BlueCobold, hallo Schorch,

vielen Dank erstmal für eure Antworten. Wahrscheinlich liegt das Problem darin, dass ich noch nicht so viel mit Grafik-Programmierung zu tun gehabt habe. Ich tu mich daher etwas schwer, mir das vorzustellen, wahrscheinlich weil ich in Pixel denke? Und zwar kann ich irgendwie nicht verstehen, wie man eine Linie zwischen zwei unmittelbar anknüpfenden Tiles zeichnen soll. z. B. ich hab ein Tile das in Breite von 0-4 geht, das zweite von 5-10 usw.
Wie kann ich denn eine Linie zwischen der Pixel-Stelle 4 und 5 zeichnen, Pixel ist doch schon die kleinstmögliche Einheit? Weil nach meiner Logik würde der Rahmen bzw. das Raster dann entweder auf der Fläche von Tile A oder Tile B hängen. Aber so soll es ja nicht sein.

Wenn ich es dann zeichen will, müsste ich ja sowas haben wie die stelle "4.5" so das es genau zwischen Pixel 4 und Pixel 5 ist. Wäre das möglich, könnte ich ja direkt, wie BlueCobold sagt "einfach Linien" zeichnen. Also ein komplettes Raster. Oder wäre es sinnvoller, wenn jedes Tile sein eigenen "Rahmen" zeichen, aber dann müsste das Tile ja wissen, wo es auf der Fläche steht, damit ich keine Doppelten Raster Linien habe. Z. B. das Tile auf der Stelle 0.0 , muss an der oben und linken Linie Raster-Striche ziehen, an der Unten und rechten hingegen nicht, da dort ein Tile anknüpft, dass selbst diese Linien zieht und damit die Linien des anderen Tiles "vollendet". Aber das ist wahrscheinlich zu kompliziert und unnötig, wenn ich die Raster Linien abhängig von der Größe einfach berechnen und "in einem rutsch" durchzeichnen könnte?

Ich hoffe meine Problematik ist nun etwas verständlicher.

Noch eine Sache: Was meint ihr mit "Engine" ? Also so gesehen, benutze ich zurzeit nur die Standardlib von Java?

Viele Grüße

Mori

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

21.11.2014, 12:59

Mit Engine meinte ich Bibliotheken die du benutzt um deine Grafiken zu zeichnen. Benutzt du dann Swing oder wie stelle ich mir das vor? Wenn du das ganze auf Pixelebene betrachtest hast du schon Recht. Es stellt sich aber die Frage ob das so schlimm ist. Auf Pixelebene ist das nun mal die Beschränkung. Ich würde dir vorschlagen das ganze einfach mal zu testen und zu gucken ob es störend aussieht. Ich selbst habe früher einfach eine transparente Grafik mit nicht transparentem Rahmen genommen und diese über jedes Tile drüber gezeichnet. Dadurch ist das Raster dann im Endeffekt 2 Pixel breit aber das hat mich nicht gestört. Theoretisch kannst du dir das ja auch mal in Paint zusammen bauen. Du legst ein paar Tilegrafiken nebeneinander und probierst dann rum wie man ein Raster darüber leben könnte. Wenn dir dann ein Ergebnis gefällt kannst du das ganze programmieren.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Lares

1x Contest-Sieger

  • Private Nachricht senden

6

21.11.2014, 13:18

Wie Schorsch schon sagte, sehe ich auch kein Problem mit den beiden genannten Lösungen. Mich würde die Ungenauigkeit oder die Breite von zwei Pixeln gar nicht stören.

Du kannst aber auch die Positionen jedes Tiles um einen zusätzlichen Pixel zum vorherigen Tile verschieben, wodurch automatisch ein Gitter entsteht. Also statt
Tile1:0-4
Tile2: 5-9

machst du:
Tile1: 0-4
Raster: 5
Tile2: 6-10

Das machst du selbstverständlich nur in deinen jeweiligen Editor und nicht im Spiel. Die Positionen kannst du ja vor dem Abspeichern korrigieren (oder noch besser: Die Verschiebung erfolgt nur während des Rendervorgangs, sodass die abzuspeichernden Positionen der Tiles gar nicht verändert werden).

7

21.11.2014, 13:22

Danke für die Antwort,

also ich benutzte zurzeit noch SWING, weil wir das im Studium benutzen. Überlege aber, ob ich das ganze mal auf etwas modernes umstelle. Mit Java8 gab es da ja Neuerungen bzgl. den GUI Komponenten.

Du hast recht, es wird wohl wirklich nicht stören. Da hat mich meine eigene Optik und Vorstellungskraft ein Schnippchen geschlagen. Ich habe nämlich mal jetzt Tiled genauer unter die Lupe genommen und festgestellt, dass die Linien dort auch auf dem Rand der Tilemap liegen - wo ich dachte das würden sie gar nicht tun. Man kann es mit dem bloßen Auge gar nicht so wirklich feststellen. Das Einzige was interessant ist, ist das die Linien aus Punkten bestehen und beim ranzommen sind es mehr Punkte und beim "rauszoomen" weniger Punkte. Das ist ein toller Effekt und irgendwie dynamisch. Na gut. Das krieg ich dann bei Zeiten irgendwie hin. Jetzt werde ich erstmal rumprobieren wenn ich nachher Zuhause bin.

Danke euch!

@Lares Danke. Ich werde es erstmal genau so handhaben, das ich einfach Linien auf dem Tile zeichne, allerdings so, das sich keine doppelten Linien habe. Das wird schon ausreichen wie es aussieht. Dankesehr.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

21.11.2014, 14:33

Wie gesagt, oft ist es gut sich das ganze einfach mal anzugucken. Entweder einfach umzusetzen oder mit Software wie Paint/Gimp einfach mal zu malen und dann selbst zu sehen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

9

21.11.2014, 17:58

Man könnte die zwei Texturen Kachel/Raster im Shader auch einfach zusammen mixen.

Werbeanzeige