PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umrechnung von Screen-Koordinaten in Map-Koordinaten?



S!r !ronh@nd
30.12.2003, 14:50
Die Überschrift sagt eigentlich schon alles. Kennt jemand eine Formel, wie ich die Map-Koordinaten eines Bilds berechne? Ich habs mal nach der Methode versucht die Screenkoordinaten des Helden durch seine Mapkoordinaten zu teilen, dies hätte zwei Werte gegeben, durch die ich dann die Screenkoordinaten des Bildes geteilt habe! (wenn das dann immer wieder bei jedem Schritt des Helden macht, müsste man die Map-Koords vom Bild doch kriegen, dachte ich...Hat aber nicht so 100% gefunzt...kennt jemand ne bessere Lösung? Schonmal danke!

bloody
30.12.2003, 19:29
Was meinse den mit MaP-COORDINATEN? meinse vieleciht die X,Y werte ?
Wenn ja die kanse in variablen speichern klick einfach auf change variable dann auf event und dort wählse den namen des events aus welche X,Y werte erechnet werden sollen in diesem fall der Held daneben nimmse X coordinaten das gleiche machase mit Y nur das du da eine andere Variable zum speichern nimmst und fertig!

Dhan
30.12.2003, 19:43
Ich glaub ich weiß, was er meint... erstmal brauchst du den Punkt, wo der Mittelpunkt des Bildes sein soll, da schaust du dann im Maker, welche Koords er hat (aber Vorsicht, Pictures gehen nach dem Bild, das man sieht, nicht nach der Karte, richtig klappts also nur bei kleinstmöglichen Karten)

diese Koords nimmst du dann und multiplizierst sie mit 16.
Fertig.

S!r !ronh@nd
30.12.2003, 20:16
Was ich meine ist: Man kann ja für ein Event zweierlei Koordinaten in Variablen speichern:

1. Die Koordinaten, die das Event auf der Map hat (X coordinate, Y coordinate) - braucht man z.B. bei Memory Place, Set Event Place oder solchen Sachen

2. Die Koordinaten, die das Event auf dem momentan angezeigten Bildschirm hat. Wenn das Event genau in der Mitte steht, sind es (160|120). Dies sind die Koordinaten, mit denen man einstellt, wo z.B. Bilder angezeigt werden, etc. ein Kästchen auf der Map sind 16 Einheiten in diesen Bildschirmkoordinaten. Man kann sie mit (Scene X, Scene Y) in Variablen speichern...

Mein Problem: Man kann nur bei Events beide Koordinatenarten abfragen, bei Bildern (weil man sie nicht in Variablen speichern kann) kenne ich nur die 2.Art von Koordinaten. Jetzt will ich aber mit "Set Event Place" ein Event auf genau die Stelle setzen, auf der sich ein bestimmtes Bild befindet. Für "Set Event Place" brauch ich die erste Koordinatenart, hab aber von dem Bild nur die zweite...wie bekomm ich also jetzt die Mapkoordinaten (1.Art) von einem Bild heraus (sie ändern sich ja auch ständig beim rumlaufen, muss also eine allgemeine Formel sein, die man per Parallel Process laufen lassen kann)

Ich hoffe, das war verständlicher...ich hoffe jemand kann mir da helfen. thx

Nightmares Sphere
30.12.2003, 20:23
Es gibt keine Formel, da eine Formel von den Maßen deiner Map abhängt.
Vielleicht lässt du einfach ein Event mit dem Pic mitlaufen, von dem hast du ja deine Koordinaten "1. Art". Das sollte machbar sein, einen anderen Weg gibts glaube ich nicht...ausser, du willst ne Formel für jede deiner Maps erstellen...
MFG Sphere

Durandal
31.12.2003, 00:05
Das machst du mit einer relativ einfachen Formel:

BEISPIEL

Bildpunkt X: 60
Bildpunkt Y: 45

In diesem Fall wären die Mappunkte folgende:

X: 4
Y: 3

Und so komme ich auf das Ergebnis:

Du lässt beide Bildpunkte durch 16 teilen.
Bildpunkt X geteilt durch 16 ist 3,75.
Der Maker berechnet keine Kommazahlen, also kommt das Ergebnis 3
Bildpunkt Y geteilt durch 16 ist 2,8125
Der Maker berechnet keine Kommazahlen, also kommt das Ergebnis 2
Diese beiden Ergbnise speichern wir in Koordinate MapX und MapY

Dieses Ergebnis ist noch nicht ganz richtig, weil die Kommazahlen weg fallen.
Um unser Ergebnis zu korregieren gehen wir folgender Weise vor:

Bildpunkt X MOD 16 ist 12
Jetzt machst du ne Fork die abfragt, ob dieses Ergebnis größer als 0 ist.
Wenn ja setzt du die Variable MapX +1

Bildpunkt Y MOD 16 ist 13
Der Maker berechnet keine Kommazahlen, also kommt das Ergebnis 2
Jetzt machst du ne Fork die abfragt, ob dieses Ergebnis größer als 0 ist.
Wenn ja setzt du die Variable MapY +1

Und siehe da:
MapX = 4
MapY = 3

Beides ist das richtige Ergebnis und die Koordinaten wurden erfolgreich umgewandelt.

S!r !ronh@nd
31.12.2003, 16:00
Vielen Dank für die ausführliche Erklärung, aber leider ist sie nicht ganz richtig. Das hab ich nämlich auch schon ausprobiert, aber das kann nicht stimmen, weil das Ergebnis von der Position des Helden abhängen MUSS. Wenn du links oben auf ner großen Map bist und das Bild hat z.B. die Koords (140|100), dann sind die Mapkoords anders, als wenn du z.B. rechts unten auf ner Map bist, weil sich die Bildkoordinaten NUR auf die Lage des Bildes im angezeigten Bildschirm beschränken.

Der einzige Fall, in dem das so stimmt, ist, wenn die Map Minimalgröße hat.

Trotzdem Danke...

Dhan
31.12.2003, 20:11
Ich glaube, ich weiß, wies geht... du nimmt erstmal die Abstände des Bildes zum Mittelpunkt X160 Y120 und zwar die wirklichen Abstände, also mit negativ, nicht der Betrag davon!
diese beiden Abstände teilst du durch 16
anschließend nimmst du die Position des Helden und addierst diese Werte (wenn sie negativ sind, wird ja automatisch subtrahiert)

zack, schon stimmts (allerdings muss dafür gesorgt werden, dass der Held mindestens 7 Feler vom oberen/unteren Rand und mindestens 10 Felder vom linken/rechten Rand der Karte entfernt ist, was dafür sorgen würde, dass er nicht mehr im Mittelpunkt des Bildschirms ist, bei Sprüngen musst du deshalb auch aufpassen, schließlich rücken Sprünge den Helden aus dem Bildschirm)

Durandal
31.12.2003, 22:56
zack, schon stimmts (allerdings muss dafür gesorgt werden, dass der Held mindestens 7 Feler vom oberen/unteren Rand und mindestens 10 Felder vom linken/rechten Rand der Karte entfernt ist, was dafür sorgen würde, dass er nicht mehr im Mittelpunkt des Bildschirms ist, bei Sprüngen musst du deshalb auch aufpassen, schließlich rücken Sprünge den Helden aus dem Bildschirm)
Das mit den 7 Felder ist garnicht nötig, weil der Char immer in der Mitte des Bildschirms steht.
Wenn er also ganz oben links in der Ecks steht (koordinate [1|1])
Wären die Mapkoordinaten 1|1 genau der Mittelpunkt vom Screen.
Am Rand erscheint eine schwarze Fläche.

S!r !ronh@nd
31.12.2003, 23:59
@Dhan: Vielen Dank, das klingt wirklich logisch!!! Ich glaube, das geht wirklich!! THX!!! http://www.multimediaxis.de/images/smilies/old/sm_12.gif

edit: das einzige was gefehlt hat, war mit mod den rest bei der division durch 16 mitzubeachten, ansonsten funzt es tadellos - DANKE!!

Dhan
01.01.2004, 01:13
Original geschrieben von Durandal
Das mit den 7 Felder ist garnicht nötig, weil der Char immer in der Mitte des Bildschirms steht.
Wenn er also ganz oben links in der Ecks steht (koordinate [1|1])
Wären die Mapkoordinaten 1|1 genau der Mittelpunkt vom Screen.
Am Rand erscheint eine schwarze Fläche.

???
Bei dir erscheint da eine schwarze Fläche???

S!r !ronh@nd
01.01.2004, 01:36
*lol* vielleicht hat er nen anderen Maker ;)

Dante5
01.01.2004, 06:04
Original geschrieben von Dhan
???
Bei dir erscheint da eine schwarze Fläche???

Sag mal welche Version hast du?

Dhan
01.01.2004, 08:12
Oh ^^
1.05b ^^

Dante5
01.01.2004, 20:53
Bei 1.05 kann man Events gar nicht auf negative Flache setzen, (z.B. -1|-1)

Dhan
01.01.2004, 22:35
Da gibbet auch keinen Ort mit negativen Koords ^^