Statistik  Mitglieder gesamt: 68138  Mitglieder online: 8  Gäste online: 7 mehr...
Anzeige
| Thread: JS: Brauche komplizierte math. Flächenberechnung
 15.05.2008 09:51 Uhr
|
|
|
|
|
Guten Tag zusammen!
Ich baue ja, falls ihr dass wisst, schon länger ein Game, was auf Javascript basiert. Es ist ein 2D-Western-Abenteuer.
Stellt euch vor ihr habt eine Spielfigut, ihre Position liegt auf Coordinaten, okay bis hierhin ist ja alles klar.
Es gibt in der Spielwelt Bounds, Grenzen an der die Spielfigur nicht weitergehen kann. Diese Bounds kann ich entweder als Linien machen oder als Dreiecke, letzteres wäre demnach eine Fläche.
Wie kann ich nun math. bestimmen, wenn der Mauszeiger über so eine Fläche kommt, und seine Koordinaten sich stets mit jeder Bewegung verändern, ob er jetzt über der Fläche ist oder nicht.
Also nochmal anders ausgedrückt:
Der Mauzeiger hat Koordinaten, klar.
Meine Fläche hat drei Eckpunkte, auch Koordinaten.
Wie krieg ich das math. heraus, ob die Koordinaten vom Mauszeiger gerade innerhalb der Fläche sind oder außerhalb.
Überfährt man die Fläche mit der Maus, verwandelt sich diese automatisch in ein Kreuz und die Spielfigur kann sich nicht dorthinbewegen, dafür zB. Oder für Felder mit bestimmten Untergrund wäre das sicherlich von Vorteil.
Das ganze wird wie gesagt in Javascript inteplementiert.
Hat da jemand von euch schon eine Ahnung, wie ich das am besten und prozessorschonendsten(!) machen könnte.
// Edit by bmk: Titel und Tags getauscht.
 1 mal bearbeitet bmk: 15.05.2008, 09:54 Uhr
|
|
 15.05.2008 09:56 Uhr
|
|
|
|
|
Bei Dreiecken ist das echt nicht einfach. Wie liegen die Dreiecke denn im Raum? Irgendwie, oder sind das zB gleichschenkelige Dreiecke, deren Basis horizontal verläuft?
Edit: Hier findest du den allgemeinen Ansatz:
http://www.uni-protokolle.de/foren/viewt/92618,0.html
Sieht komplizierter aus, als es ist. Wenn es sich bei dir um ein spezielles Dreieck handelt, sollte sich da sicher eine brauchbare Formel daraus entwickeln lassen. Have phun...
 1 mal bearbeitet bmk: 15.05.2008, 09:59 Uhr
|
|
 15.05.2008 10:10 Uhr
|
|
|
|
|
___________________________ im Urlaub...
<?php open_brain($user); ?> FATAL ERROR!!!
Ich bin zurück!!! =>http://www.wieschoo.com
|
|
 15.05.2008 10:54 Uhr
|
|
|
|
|
Hallo und Danke für die Links!
Die Dreiecke besitzten keine Z-Ebende und sind alle unterschiedlich, sie setzten sich aus 3 X-Koordinaten und den 3 dazugehörigen Y-Koordinaten. Die Winkel darin sind von daher immer verschieden und werden bei der Berechnung nicht berücksichtigt.
Ja Vektorrechung, genau das ist das!
 1 mal bearbeitet Armon: 15.05.2008, 10:57 Uhr
|
|
 15.05.2008 11:08 Uhr
|
|
|
|
|
Ist doch rille, ob die Dreiecke im Raum oder sich auf der x- y Ebene befinden. Dann ist halt die Z-Koordinate überall gleich. In der Koordinatengleichung würde dann das Z wegfallen.
___________________________ im Urlaub...
<?php open_brain($user); ?> FATAL ERROR!!!
Ich bin zurück!!! =>http://www.wieschoo.com
|
|
 15.05.2008 11:22 Uhr
|
|
|
|
|
@wieschoo: Natürlich fiele das dann weg. Aber das ist ja das, was ich gemeint habe: Wenn schon von Anfang an bekannt wäre, dass das wegfallen wird, bräuchte man es von vorn herein erst gar nicht in die Rechnung mit aufnehmen. Bei einer Berechnung, die bei jeder Mausbewegung ständig ausgeführt werden soll, macht das schon nen Unterschied... ;-)
|
|
 15.05.2008 11:27 Uhr
|
|
|
|
|
Zitat: Bei einer Berechnung, die bei jeder Mausbewegung ständig ausgeführt werden soll, macht das schon nen Unterschied... ;-) Is ja nicht mein Problem
Da sowieso alles über Javascript läuft, ist es nur Clientseitig. Somit hält sich eine Belastung in Grenzen. Ich wüde die Map sowieso rastern. Mann muss ja nicht jeden Pixel einzeln überprüfen. Oder hab ich schlechte Augen?
___________________________ im Urlaub...
<?php open_brain($user); ?> FATAL ERROR!!!
Ich bin zurück!!! =>http://www.wieschoo.com
|
|
 15.05.2008 11:51 Uhr
|
|
|
|
|
Naja, auch die Clients (besser gesagt: die Browser mit ihrer miesen Javascript-Performance) haben da schon ihre (engen) Grenzen.
Und gerade bei einem Browsergame, wo sich viel in JS abspielt, muss man auf sowas auf jeden Fall auch achten. Und bei einer Core-Loop sowieso.
|
|
 15.05.2008 12:35 Uhr
|
|
|
|
|
Hallo nochmal,
die Z-Ebene fällt komplett weg und wird auch in keiner Berechnung Erwähnung finden.
Das Spiel selbst wird natürlich Clientseitig sein. Ein lokaler Socketserver wird alles managen, zur HTML-Darstellung wird MSHTA verwendet.
Und apropo Rasterung, an sowas hatte ich auch schon gedacht. Was wäre, wenn der Prozessor pro Durchgang nicht jedes einzelne Pixel, sondern gleich 5 als Eins berechnen würde? Er wäre deutlich schneller und die Spielequalität wäre auch noch ertragbar. Dazu wollte ich in der Verwaltung einen Schieberegler zur Verfügung stellen, bei dem sich jeder die Raster-Schwelle selbst einstellen kann.
Dazu soll eben auch eine Funktion deklariert werden:
function _ON_FLAT(xc, yc, x1, y1, x2, y2, x3, y3)
{
// Code ...
return true;
// oder
return false;
}
 2 mal bearbeitet Armon: 15.05.2008, 12:46 Uhr Armon: 15.05.2008, 12:46 Uhr
|
|
 15.05.2008 13:16 Uhr
|
|
|
|
|
 2 mal bearbeitet Armon: 15.05.2008, 13:16 Uhr Armon: 15.05.2008, 13:23 Uhr
|
|
|