mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Di 16.04.2024 18:07 Benutzername: Passwort: Auto-Login

Thema: Javascript: Math.sin, Math.cos Formel. vom 28.09.2012


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Javascript: Math.sin, Math.cos Formel.
Seite: 1, 2  Weiter
Autor Nachricht
metalrain
Threadersteller

Dabei seit: 28.09.2012
Ort: -
Alter: -
Geschlecht: -
Verfasst Fr 28.09.2012 11:21
Titel

Javascript: Math.sin, Math.cos Formel.

Antworten mit Zitat Zum Seitenanfang

Hallo liebes Forum.
Im Moment bin ich dabei ein Holzlabyrinthspiel zu programmieren. Also Kugel durch kippen des Brettes durch ein Labyrinth führen.

Damit die Hindernisse auch entsprechend erkannt werden, habe ich mir hierfür eine Funktion geschrieben, die ich (als alter Actionscriptprogger) hitTest genannt habe.

Funktioniert auch super. Allerdings wäre es natürlich hübsch, wenn sich die Kugel auch wie eine Kugel um die Hindernisse bewegt, anstatt dies so zu tun, als wäre sie ein Quadrat (was sie ja im technischen Sinne auch ist).

Also dachte ich mir, ich berechne anhand der X, Y Koordinaten und dem bekannten Kugelradius von 35Pixeln, neue X Y Koordinaten.

Mir fehlt aber jeder Ansatz.

Hier mal der entsprechende Code
Code:

/*walls ist das Array mit den ID's der jeweiligen Hindernisse und ball eben die Kugel*/
           for(var i=0; i<walls.length; i++){
                  var hitter=document.getElementById(walls[i]);
              if(ball.hitTest(hitter)){
                                //ball.hx ist default auf false. Trifft hitTest aber entweder links oder rechts zu, gibt hx den entsprechenden X Wert zurück. Für die Y Achse macht hy das selbe
            if(ball.hx){bx=ball.hx;}
            if(ball.hy){by=ball.hy;}            
         }            
      }

Ich hoffe ich konnte mich einigermassen Verständlich machen Lächel
Sorry bzgl. Formatierung. Eingetragen habe ich es korrekt. Das Forum scheint das ganze zu zerschießen. Vieleicht liegt es an den Kommentaren.


Zuletzt bearbeitet von metalrain am Fr 28.09.2012 11:23, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
pantonine

Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
Verfasst Fr 28.09.2012 13:11
Titel

Antworten mit Zitat Zum Seitenanfang

Naja, zumindest nen Ansatz könntest Du ja posten. Ich sehe da keine Kreisfunktionen in Deinem Code.
  View user's profile Private Nachricht senden
Anzeige
Anzeige
metalrain
Threadersteller

Dabei seit: 28.09.2012
Ort: -
Alter: -
Geschlecht: -
Verfasst Sa 29.09.2012 08:53
Titel

Re: Javascript: Math.sin, Math.cos Formel.

Antworten mit Zitat Zum Seitenanfang

metalrain hat geschrieben:

Mir fehlt aber jeder Ansatz.


Wenn ich einen Ansatz hätte, hätte ich wahrscheinlich auch schon die Lösung. Ich habe es in allen Richtungen versucht.
Vom Mittelpinkt aus mit Math.athan, den Winkel Gegenrechnen und zu Koordinaten umrechnen. Funktioniert aber nicht. Eher das Gegenteil ist der Fall. X und Y werden noch größer vom Mittelpunkt als vorher. Und soll ja alles kleiner werden.
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Sa 29.09.2012 12:27
Titel

Antworten mit Zitat Zum Seitenanfang

Solche Dinge macht man für gewöhnlich anders. Du benötigst eine Kollisionsnormale. Bei der Schnittberechnung zwischen 2 Kugeln kannst du einfach den Richtungsvektor zwischen den Zentren der Kugeln benutzen. Im nächsten Schritt musst du entlang der Kollisionsnormalen die Kollision lösen. Hierzu musst du die Eindringtiefe berechnen und die Kugel entlang der normalen zurückschieben. Willst du die Kugel mit einer Fläche kollidieren lassen musst du zu jeder Fläche eine Kollisionsnormale vorberechnen und das selbe tun.
  View user's profile Private Nachricht senden
metalrain
Threadersteller

Dabei seit: 28.09.2012
Ort: -
Alter: -
Geschlecht: -
Verfasst So 30.09.2012 09:34
Titel

Antworten mit Zitat Zum Seitenanfang

Ich weiß jetzt leider nicht was du mit einer Kollisionsnormalen meinst.
Wenn du damit meinst, ob du Kollision erkannt wird, Ja. Es wird Die jeweilige Seite der Kollision erkannt (also recht, oben, links oder unten) und es wird die Kollisionskoordinate zurückgegeben.

D.h. Kugel trfifft auf Fläche von zB. rechts oben. Die Kugel hat einen Radius von 35 Pixeln. Also. 35Pixel rechts und sagen wir zB. 25Pixel von oben.

D.h. theoretisch müsste die Kugel jetzt, dem Kollisionswinkel entsprechend zB. 30 Pixel rechts und 20 Oben haben.
Mein Ansatz war also erst mal den Kollisionswinkel zu berechnen und dann eben anhand der Winkelberechnung die gegebenen Koordinaten umzurechnen. Funktioniert aber nicht.
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst So 30.09.2012 12:34
Titel

Antworten mit Zitat Zum Seitenanfang

Dein Ansatz kommt mir da aber auch recht komisch vor. Hab noch kein Verfahren gesehen indem Winkel eingesetzt werden um solche Dinge zu berechnen. Du hattest noch nie mit Vektoren zu tun oder?

Wie du es drehst und wendest, du wirst dich wenn du das sinnvoll und sauber machen willst, ohne fiese Hacks, mit Vektoren auseinander setzen müssen. Das bisschen was du dafür brauchst ist nicht schwer und ruckzuck angewendet und auch implementiert.

Zurück zum eigentlichen Problem: Im Falle von Kugellabyrinth ist die häufigste Kollisions-Konstellation wohl Kugel gegen irgendwelche Boxen. Jede Seite dieser Box besitzt einen Vektor der normiert ist und senkrecht auf der Seite steht. Wird eine Kollision erkannt ermittelst du welche Seite dieser Box schneidet. Du ermittelst dann wie weit dein Objekt eindringt entlang dieser Seite und schiebst um den entsprechenden Betrag entlang ihrer Kollisionsnormalen entlang zurück.

In den meisten Spielen arbeitet man um irgendwelche Dinge zu bewegen mit Beschleunigung und Geschwindigkeit. Man kann sich die Berechnung der Eindringtiefe sparen wenn man die Geschwindigkeit und Beschleunigung auf die Kollisionsnormale projiziert und um den projizierten Betrag zurückschiebt. Um die Projektion zu berechnen genügt es die entsprechenden Skalarprodukte zu berechnen, wie das geht kannste googlen, das geht recht simpel.

Du bekommst dann ein Entlang-Gleit verhalten entlang der Fläche. Wenn du das Ding weghüpfen lassen willst kannst du auch einfach deinen Geschwindigkeits- und Beschleunigungsvektor an der Kollisionsnormalen reflektieren und dann eventuell noch eine Reibungsdämpfung einfügen.
  View user's profile Private Nachricht senden
metalrain
Threadersteller

Dabei seit: 28.09.2012
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 01.10.2012 09:10
Titel

Antworten mit Zitat Zum Seitenanfang

Wahrscheinlich reden wir völlig aneinander vorbei. (Ich erkläre aber auch doof)

Hier mal das Spiel, bzw. das Demo

Funktioniert auch mit dem Iphone durch Kippen und neigen des Gerätes. Ansonsten einfach die Maus entsprechend darüber bewegen.

Du siehst also, das mit den Kollisionen habe ich schon längst.

Da die Kugel aber faktisch ja nix anderes ist als ein Quadtrat, bewegt sie sich auch wie eines um die Hindernisse.
Sprich Hindernisstreffer oben links und Kugel unten rechts, bewegt sich die Kugel mit einem Abstand um das Hinderniss herum. Ich wollte es aber gerne so machen, dass sich die Kugel wie eine Kugel um die Hindernisse bewegt.

Schau dir das Demo einfach mal an.

Danke Lächel
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Mo 01.10.2012 09:46
Titel

Antworten mit Zitat Zum Seitenanfang

Ich versteh schon was du meinst, nur ist das nicht grade sauber und birgt einige Nachteile. Ein weiteres Problem ist das du deine Kugel über eine Box definierst. Richtiger wäre eine so genannte Bounding-Sphere. Die ist in der Regel definiert durch Mittelpunkt und Radius. Kollisionserkennungen machst du dann durch simple Abstandsbetrachtungen.
  View user's profile Private Nachricht senden
 
Ähnliche Themen flash mx 2004: probleme mit math.ceil()
Formel zum hochzählen [gelöst]
Illustrator: Vektoren als Formel anzeigen?
[javascript] mit <select> feld wert an javascript funk
javascript in php
Javascript im XML
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.