Tilemap, schon wieder
Übersicht

![]() |
M0rgensternBetreff: Tilemap, schon wieder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute.
Ich weiß, dass dieses Thema schon x-mal behandelt wurde. Ich hab mir im Prinzip schon jeden Beitrag den ich gefunden habe durchgelesen, aber trotzdem das passende nicht gefunden. Ich habe mich entschieden AlienShooter 2D in BlitzMax umzuschreiben. Ich habe dann direkt mit dem Mapeditor angefangen. Mein Problem ist aber das SCrolling. Ich hab schon versucht verschiedene Dinge nachzubasteln, aber das funktioniert alles nicht so ganz. Problem ist folgendes: Ich habe im Prinzip die Spielerkoordinaten, die sich immer in der Bildschirmmitte befinden sollen. Die "Kamera" im Editor soll auch immer in der Bildschirmmitte sein. Ich habs jetzt hinbekommen, dass die Map sich bewegt, aber das ganze sieht ehre seltsam als richtig aus. Das Problem ist einfach, dass ich nicht genau weiß, wie ich das mit den Kamerakoordinaten verrechnen soll. Ich hab hier mal den Code, der relevant ist: Variablen: BlitzMax: [AUSKLAPPEN] Const iTilesize:Int = 32 Hauptschleife: BlitzMax: [AUSKLAPPEN] While Not KeyHit(KEY_ESCAPE) Or AppTerminate() Das was auskommentiert ist hat nicht richtig funktioniert, war aber so ne kurze Überlegung. Wäre echt toll, wenn mir das jemand irgendwie erklären könnte. Lg, M0rgenstern |
||
![]() |
Shinkiro1ehemals "Espada" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier ein kleiner Auszug meines Projektes, wo das recht gut läuft.
BlitzMax: [AUSKLAPPEN] '====================================================================== Bei mir ist der Spieler allerdings 96 Pixel vom linken Rand entfernt, also nicht in der Mitte (aber das ist ja leicht anpassbar). Die cam_x variable kommt bei mir also nur beim Rendern vor, wo sie überprüft wo der Spieler ist. Dessen Koordinaten werden dann relativ zum Bildschirm ausgerechnet und an DrawImage übergeben. Ich hoffe das konnte dir ein wenig weiter helfen. |
||
Blog :: Ein RPG in 3 Monaten erstellen
Twitter :: News zum Projekt |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
ALso, tut mir leid, aber ich muss ehrlich sagen, dass dein Code mir nicht besonders weiterhilft.
Ich weiß ja auch nicht wirklich was genau bei meinem falsch ist. Lg, M0rgenstern |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde die Spieler- (oder Kamera-) Position am Anfang = 0 setzen und statisch auf die Mitte des Bildschirms Zeichnen. Wenn man sich bewegt, wird die Position normal verändert. Jedes Objekt wird an seine Eigenen Koordinaten + SpielerKoordinaten gezeichnet - vorteilhafter Weise, wenn sie im sichtbaren Bereich liegen. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Koordinaten auf 0 setzen aber dann auf die Mitte des Schirms zeichnen?
Wie das denn? Kannst du mir vielleicht ein konkretes Zahlenbeispiel geben? Ich kann mir sowas dann besser vorstellen. Btw: Brauch ich dann nur noch 4 Variablen? (PlayerX,PlayerY,SCrollX,SCrollY) Lg, M0rgenstern |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Beispiel
BlitzMax: [AUSKLAPPEN] SuperStrict Du musst dann nur noch berechnen, welche Tiles sichtbar sind und gezeichnet werden müssen. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] fMoveY = fMoveY - 1
fScrollY = fPlayerY - halbeauflösungy so sollte es eg gehn, der player ist dann ja immer bei halbeauslösung einzumalen |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Vielen Dank. Das Prinzip habe ich verstanden.
Ich hätte nur noch eine Frage: Wie beziehe ich ein Offset mit ein. Ich hab nämlich am Anfang folgendes stehen: BlitzMax: [AUSKLAPPEN] Global fPlayerX:Float = iMapwidth / 2 Und dadurch liegt der Spieler erstmal außerhalb der Map. Ich wollte ihn aber auf die Mitte der Map setzen. Außerdem habe ich noch ein Problem: Wenn ich nach rechts und nach unten scrolle, dann wird mit zunehmender zurückgelegter Strecke ein schwarzer Streifen oben bzw unten gebildet, der immer größer wird desto weiter ich scrolle. Verstehe aber leider nicht ow der herkommt. Hier mal die Hauptschleife: BlitzMax: [AUSKLAPPEN] While Not KeyHit(KEY_ESCAPE) Or AppTerminate() Lg, M0rgenstern |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
irgendwie komisch was du das tust...für das scrolling solltest du eg den scrollx scrolly wert abziehen nicht fPlayerX fPlayerY
kleines beispiel BlitzMax: [AUSKLAPPEN] Graphics 640,480 |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich hab meinen Code jetzt mal angepasst.
Aber das funktioniert jetzt gar nicht mehr. Ich sehe nur noch den weißen Spielerkreis, wenn ich Scrolle den Text "0/0", aber keine Map mehr. Ich hab hier mal den Code: BlitzMax: [AUSKLAPPEN] While Not KeyHit(KEY_ESCAPE) Or AppTerminate() Lg, M0rgenstern |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
die ifbedingungen in der mapmalschleife sind daran schuld, da hat das scrollx/y nichts zu suchen, sobald du die -scrollx und -scrolly raushaust läufts | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, wenn ich hier:
BlitzMax: [AUSKLAPPEN] DrawImage(tiTiles, iMapXIndex * iTilesize - fScrollX, iMapYIndex * iTilesize - fScrollY, iMap[iMapXIndex - fScrollX, iMapYIndex - fscrolly, 1]) Das SCrollX und ScrollY rausnehme, dann wird zwar was angezeigt, aber die Map bewegt sicht nicht mehr. Wenn ichs drin lasse, aber die if-bedingungen davor rausnehme, dann bekomm ich ne Fehlermeldung. Lg, M0rgenstern |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
moment, ich mache mal...
BlitzMax: [AUSKLAPPEN]
du musst die map genauso malen wie vorher auch, nur um ein paar pixel verschoben, also die selben bilder nur an anderer stelle |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey, wow. Vielen Dank. Jetzt funktioneirts und viel wichtiger: Ich habs sogar verstanden.
Vielen Dank. Ich hätte nur noch eine Frage: Ich lasse im Moment ein bestimmtes Tilebild am Mauszeiger anzeigen. Also um später dann das entsprechende Tile zu verändern. Aber wie genau muss ich das jetzt auf die Map umrechnen und wie genau kann ich dann bei einem Mausklick ein Tile ändern? Also eben ein bestimmtes Tile ansprechen? Ich hab mir sowas gedacht wie: MXTile = (Mousex() + fscrollx) / itilesize UNd für Höhe entsprechend, bin mir aber nicht sicher... Lg, M0rgenstern |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im Zweifelsfall mal ausprobieren...
...sieht aber richtig aus. iMapXIndex * iTilesize - fScrollX = X iMapXIndex * iTilesize = X + fScrollX iMapXIndex = (X + fScrollX) / iTilesize |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja stimmt auch.
Vielen Dank^^ Sorry für den letzten Post. Lg, M0rgenstern |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
beim zeichnen machst du folgendes:
malposx=posx-scrollx malposy=posy-scrolly beim mausklick machst du dann posx=malposx+scrollx posy=malposy+scrolly malpos ist bei dir halt der mauszeiger |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group