PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RM2k3 - Genaue Fortbewegung



Zogoje
17.02.2011, 22:08
Hallo Leute,
ist es möglich diese "Kästchen" Kollisionsabfrage zu übergehen?
Ich würde das gerne über Koordinaten laufen lassen. 1Schritt = 16 Koordinaten Punkte, aber leider kann ich den
Charakter nicht zu bestimmten Koordinaten schicken. Vielleicht ist ja auch mein Denkansatz falsch...
Jedenfalls stört die Starre Bewegungsmoglichkeit die Atmosphäre meines Spiels (nya es ist bisher ja nur ein Script xD)
Sorry wenn's das Thema schon gegeben haben sollte...

Ich hoffe ihr könnt mir helfen oder zumindest neue Denkansätze geben

Gruß Zogo =)

Multi-Master1988
17.02.2011, 22:33
Frage wie sieht denn dein Script genau aus?

Nutze doch den Easy Event Exporter den kannst du hier finden:
http://www.multimediaxis.de/threads/105858-Liste-der-Patches-Tools-f%C3%BCr-den-RM2k%283%29

Damit kannst du für uns den Code sichtbar machen und hilfst uns schonmal sehr.
Erklärung liegt bei bzw. Cherry wird dir ansonsten wenn sie den Thread liest eine Anleitung geben.

Hast du es mal mit dem Ereigniss-befehl Alles Bewegen veruscht?

Lg
Multi-Master1988

niR-kun
17.02.2011, 23:17
Es ist schwer eine Kollisionsabfrage, die über die Koordinaten geht statt über das 16x16-Pixel-Raster, zu schreiben. Ich könnte mir da vorstellen, dass man das über 4 Variablen pro "Wand" macht, je 2 Variablen für den Anfangspunkt und 2 Variablen für den Endpunkt. Was zwischen den 2 Punkten gradlinig liegt, ist dann eine Wand. Das ist allerdings sehr aufwändig. Da man ja nicht nur eine Wand hat, sondern viele Wände, die in verschiedene Richtungen gehen. Über einen Bresenham-Algorithmus lässt sich die Wand im 16x16-Raster gut berechnen.

Einen Helden relativ genau (16x16 Pixel genau) zu einer Koordinate zu schicken ist möglich.
(Ich gehe davon aus, dass der Held nicht über "Show Picture" gezeichnet wird, sondern ein normaler Chara ist).
Da rechnest du für jede x- und y-Koordinate einmal einen Wert1 mit Koordinate div 16 aus und dann einen Wert2 mit Koordinate mod 16 aus.
Wenn Wert2 größer oder gleich 8 ist, dann erhöhst du Wert1 um 1 (bei 0 bis 7 kann man sagen, dass er eher bei dem von Wert 1 berechneten Kästchen steht, bei 8 bis 15 ist es eher das benachbarte Kästchen in der Koordinatenrichtung). Wert1 ist dann die Koordinate im 16x16-Raster. Das zu den Koordinaten im 16x16-Raster hinlaufen ist dann so wie alle anderen das auch machen (trivial).

Corti
17.02.2011, 23:31
Wenn ich das recht verstehe willst du Pixelmovement. Das geht ganz einfach. Du nimmst dir ne Koordinate und fragst Tasten ab, je nach Tastendruck wird die Koordinate in X oder Y verändert. Anhand des Bildausschnitts auf der Gesamtkarte ergibt sich aus der Weltkoordinate der Figur eine Koordinate im Bild. An dieser Koordinate zeigst du dann den Helden als Picture an.

Ohja, und da sind wir auch schon beim Nachteil:
Charsets einsetzen kannste dabei vergessen. Damit ist reines Chipsetmappen auch hinfällig. Damit ist die normale Kollisionsabfrage, auch mit Welt sowie interaktion mit NPCs über Charsets hinfällig. Damit wärs nötig ne ganze Menge mehr selbst zu scripten... ^^

Zogoje
18.02.2011, 07:32
Erstmal danke für die schnellen Antworten. Ich wollte das schon über Charsets realisieren, weil man mit denen doch um einiges flexibler ist als mit einzelnen Bildern (mal ganz davon abgesehen das man das Chipset Mapping dazu aushebelt).
Was genau meintest du mit "Das zu den Koordinaten im 16x16 - Raster hinlaufen ist dann so wie alle anderen das machen", niR-kun?
Wenn ich meinem Charackter optisch eine Position über Koordinaten zuweisen könnte wär das Problem gelöst. Ich würde einfach das drücken von Bewegungstasten in zahlen umrechnen und diese dann passend auf die Koordinaten rechnen.
Theoretisch fehlt mir nur der Befehl "Move Event(Hero) to var1(posX) ; var2(posY)

Corti
18.02.2011, 08:24
Charsets sind an das Raster gebunden. Es gibt keine Möglichkeit diese aus dem "16x16 Grid" zu lösen und genauer zu bewegen oder anzuzeigen. Du kannst Charsets nicht genauer steuern, als dies schon standardmässig drin ist.

niR-Kun spielt drauf an (wenn ich das recht verstanden hab) innerhalb der 16er Kästchen pixelgenau zu rechnen. Der erwähnte Bresenham-Algorithmus hat den Vorteil, dass er keine Hochmathematik benötigt, kein schlechter Ansatz, allerdings kannst du das gesamte Thema "pixelgenaues Bewegen" abhaken und vergessen, wenn du mit Char- und Chipsets arbeiten willst. Punkt.


Alternativen:
Über Move-Event kann man Helden auch Diagonal bewegen. Es ist problemlos möglich, sich ein Script zu bauen, dass die Bewegung im Spiel ein bischen flüssiger und weniger gerastert aussehn lässt.

Cherry
18.02.2011, 08:36
Hm, "Move Event ... to X/Y coordinates" wäre kein schlechtes Feature für den Revolution Patch. *merk*

Ich hatte gerade eine andere Idee: Mit etwas Aufwand ließe sich zumindest der Held sehr wohl pixelgenau bewegen (für andere Events wäre der Aufwand wohl doch etwas zu viel).

Und zwar - das ginge jetzt allerdings nur mit dem RM2k - könnte man sich den CharExpand-Patch schnappen, welcher größere Charsets erlaubt. Dann macht man 256 Charsets, wo die Grafik immer um einen Pixel weiter verschoben ist (16 x 16) - das ist wohl die meiste Arbeit daran. Dann ein Skript, was diese 256 Grafiken hernimmt, um alle möglichen Positionen innerhalb eines Tiles anzeigen zu können. Eine pixelgenaue Bewegung wäre dann also erstmal das schnelle Wechseln der Charsets, gefolgt von einem sprunghaften Bewegen es Helden (mit Teleport und ohne Bildübergang), oder mit einem Event als Helden, was dann per Set Event Place teleportiert werden könnte.

Soweit mein theoretischer Ansatz, ob es funktioniert ist eine andere Sache ^^

Zogoje
18.02.2011, 08:38
Hm schade, eine Idee hab ich noch die ich versuchen mag. Ich schreib hier rein wenn ich gescheitert bin ^^

Zogoje
18.02.2011, 08:41
Hatte fast die gleiche Idee Cherry

Corti
18.02.2011, 08:50
Die Vernunft hat grade Tabletten genommen und schwimmt leblos da hinten im Brunnen.

Zogoje
18.02.2011, 09:13
Naja ich werd mich des Aufwands willen mich wohl damit zufrieden geben müssen aus 1 Feld 1 1/2 Felder zu machen. Wie gesagt ich meld mich wenn ich gescheitert bin...