Koordinatenkreuz - 0-Reihen Doppelt
Übersicht

McThyzerBetreff: Koordinatenkreuz - 0-Reihen Doppelt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich habe (bzw. versuche) ein Programm geschrieben (zu schreiben), welches eine 101x101 Welt mit 64px * 64px Tiles darstellt. (101, da nach oben 50, nach unten 50 und in der Mitte eine Reihe mit "0") Wenn ich oben aus der Welt gehe, soll ich unten wieder kommen, das klappt alles. Jedoch sind alle Reihen, dessen X oder Y Koordinaten 0 sind Doppelt, der (0|0) Punkt ist sogar 4x vorzufinden. Bilder: Die Zahlen sind die Koordinaten (links -> X Koordinate; rechts -> Y Koordinate) Wenn man genau hinsieht, sieht man einen weißen Punkt, der befindet sich im richtigen (0|0) Feld und ist quasi Zentrum der Welt. Der rote Punkt zeigt nur die Bildschirmmitte an. Bild A ![]() Bild B ![]() Hier die relevante Script-Stelle: Das Programm hat die Auflösung 1280x960. TileSize - Da ich mich vorher noch nicht auf eine Tile Größe festlegen wollte, hab ich sie als Konstante eingerichtet, die steht immer auf 64. CenterX/Y - Die X/Y-Koordinaten des Zentrums der Welt :O FeldX/Y_px - Die Pixel-Koordinaten (also Pixel von oben Links) vom markiertem Feld. FeldX/Y_koord - Die Feld-Koordinaten (also Distanz, in Feldern, von Zentrum) vom markiertem Feld. Der Fehler muss bei der berechnung von "FeldX/Y_koord" passieren. Der Fehler findet auch statt, wenn ich diesen "Weltkugel Effekt" [+ 150) Mod 100 - 50] rausnehme. Der Exakte Fehler ist, dass bei den Formeln Code: [AUSKLAPPEN] ((MouseX() - TileSize/2 - CenterX)/TileSize)
Code: [AUSKLAPPEN] ((MouseY() - TileSize/2 - CenterY)/TileSize)
bei den beiden 0-Reihen das selbe rauskommt. Ich weiß aber nicht, wie ich das umgehe. Code: [AUSKLAPPEN] Local FeldX_px = ((MouseX() - TileSize/2 - 1 - CenterX Mod TileSize)/TileSize) * TileSize + CenterX Mod TileSize + TileSize/2
Local FeldY_px = ((MouseY() - TileSize/2 - 1 - CenterY Mod TileSize)/TileSize) * TileSize + CenterY Mod TileSize + TileSize/2 Local FeldX_koord = (((MouseX() - TileSize/2 - CenterX)/TileSize) + 150) Mod 100 - 50 Local FeldY_koord = (((MouseY() - TileSize/2 - CenterY)/TileSize) + 150) Mod 100 - 50 SetColor(255, 0, 0) DrawLine(FeldX_px, FeldY_px, FeldX_px+TileSize, FeldY_px) DrawLine(FeldX_px, FeldY_px, FeldX_px, FeldY_px+TileSize) DrawLine(FeldX_px+TileSize, FeldY_px+TileSize, FeldX_px, FeldY_px+TileSize) DrawLine(FeldX_px+TileSize, FeldY_px+TileSize, FeldX_px+TileSize, FeldY_px) SetColor(255, 255, 255) 'Debug DrawText(FeldX_koord + " " + FeldY_koord, FeldX_px, FeldY_px) Ich weiß, dass es extrem unübersichtlich ist, sorry. Ich finde in meinem Durcheinander zurecht und eigentlich schaut bei mir auch kein anderer rein. Ich hoffe ihr könnt mir trotzdem Helfen und mir sagen wie ich die 0-Reihen repariere. Edit: Wenn ich wüsste, wie man hier was Anhängt, würde ich die .exe ja mit hochladen. |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die EXE-Datei und andere Anhänge (z.b. Bilder, Dateien, ...) kannst Du ins das Archiv packen. Hier hat jeder User einen Webspace von 10MB. Im Forumsbeitrag setzt Du dann einen Link zu dieser Datei.
In deinem Bild sieht man nicht sehr gut, was Du mit "doppelt" meinst...Für mich sehen sogar alle Reihen gleich aus ![]() Vielleicht wäre es besser, wenn Du mal schon ein anderes Tile auf die 0-Reihe zeichnen lässt, damit man den Effekt auch sieht? Wenn hier wirklich Tile-Reihen doppelt sind, so kann es ja nix mit der Maus, sondern eher was mit der Zeichenroutine zu tun haben. Ich denke, du meinst eher dass die Feldkoordinaten, die aus der Maus ausgerechnet werden sowohl im Feld (-1/0) als auch im Feld (0/0) beide Male ein scheinbares (0/0) ausrechnen. Dies entsteht wegen der Umwandung von negativem Fliesskommazahlen in INTEGER: Du siehst es mit diesem Test-Code: BlitzMax: [AUSKLAPPEN] For i#=2 To -2 Step -0.3 und dies wird angezeigt: Zitat: 2.00000000 wird zu 2
1.70000005 wird zu 1 1.40000010 wird zu 1 1.10000014 wird zu 1 0.800000131 wird zu 0 0.500000119 wird zu 0 0.200000107 wird zu 0 -0.0999999046 wird zu 0 -0.399999917 wird zu 0 -0.699999928 wird zu 0 -0.999999940 wird zu 0 -1.29999995 wird zu -1 -1.59999990 wird zu -1 -1.89999986 wird zu -1 Bei deinem Beispiel, gibt es eine einfach zu verstehende Lösung: Du zähltst vor dem Teilen einfach 1000*TileSize dazu und nach dem Teilen subtrahierst Du eine 1000. Hier habe ich ein lauffähiges Beispiel: BlitzMax: [AUSKLAPPEN] Graphics 800,600 Nachtrag: Wenn Du das ganze später wieder scrollen willst, fallen ganz viele Parameter weg, die Du in deinem Code noch zu benötigen glaubst. z.B. ist es unnötig auf die TileSize/2 einzugehen. Ebenso ist das Zentrieren des Bildschirms, wie du es mit -50 bis +50 versuchtst unnötig. Hier mal ein Beispiel bei dem es schon scrollt: BlitzMax: [AUSKLAPPEN] Graphics 800,600 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group