Pixelgenaue- & Schräge Angelegenheit

VoodOsK

Mitglied
Erste Frage:
Ich habe 2 MCs einer rechts oben der andere in der mitte unten...nun möchte ich das der rechts oben gleichmässig zu dem in der mitte unten geht...wie mache ich das?(irgendwie pythagoras usw :S) ich kann mir zwar die Länge der Verbindung ausrechnen aber ich komm nicht drauf wie ich das in eine Beschleunigung von x & y umsetzen kann!!

Und wenn wir gerade beim Fragen sind:
Wie kann ich bei MCs eine Pixelgenaue kollisionsabfrage machen? bei mir ists immer so, dass es bei einem Overlap schon alarm schlägt, wenn ich einen hitTest mache....

MfG
 
Stimmt - ein hitTest prüft lediglich, ob sich die Boundingboxen der MCs überschneiden - sprich: ob ein Eckpunkt von MC1 innerhalb der Box von MC2 ist.

Eine Pixelgenaue Kollisionsabfrage wäre im Prinzip eher eine Unterteilung in mehrere MCs und das währe sehr aufwändig. Da Flash dich nicht wirklich auf die einzelnen Pixel zugreifen lässt ist das wohl die einzige Lösung - würde mich aber freuen, wenn ich mich irre (das wäre nämlich toll!).

Das mit dem Pytagoras is garnicht so schwer. Eigentlich musst du das ganze nur in gleiche häppchen Unterteilen. Sagen wir mal:

MC1: X = 1; Y = 20
MC2: x = 16; Y = 3

Also ist:

Weg, den MC2 auf dem weg zu MC1 zurück legen muss auf der...
X-Achse: -15
Y-Achse: 17

Das ganze Unterteilen wir in gleichgroße Happen. Sagen wir, die Animation soll 4 Frames dauern. Das heißt:

Speed auf X-Achse = -(15/4)
Speed auf Y-Achse = 17/4

Das sind zwar krumme Zahlen, wird aber passen.

Liebe gGrüße aus den USA,
Jens
 
Hi,

Berechnung von Winkel und Entfernung aus kartesischen Korrdinaten:
Code:
entf = Math.sqrt(Math.pow(x1 - x, 2), Math.pow(y1 - y, 2));
winkel = Math.atan((y1 - y, 2) / (x1 - x, 2));
(Es gibt Unterscheidungen für die einzelnen Quadranten, aber die habe ich grade nicht im Kopf. - wird bei Bedarf nachgetragen)

?x und ?y anhand Winkel und Geschwindigkeit bestimmen:
Code:
dx = -Math.sin(winkel) * geschw;
dy = -Math.cos(winkel) * geschw;

Gruß
.
 
Die Schräge Angelegenheit habe ich mitlerweilen gelöst! Danke!

Was allerdings die Pixelgenaueangelegenheit angeht hab eich folgendes gefunden: *KlickMich*

So das ganze mit dem Level von Hand zusammenbasteln geht ja da noch ganz ordentlich, bis auf Level3, ich kann mir da fast nicht vorstellen, dass das nur aus vielen kleinen Teilen zusammengestellt ist! Was meint ihr dazu?

MfG VoodOsK
 
Hi,

was soll das in Level 3 besondere sein? Das war doch das Ding mit den konzetrischen Kreisen und diesen "Windmühlenflügeln" in der Mitte? Du hast einen MC mit den statischen "Mauern" und einen rotierenden mit den "Flügeln". Nun prüfst Du laufend eine Kollision zwischen beiden MCs und Deinem Sprite.

Dafür genügt ein stinknormales hitTest, da die "Spielfigur" eigentlich auch nur ein kleines Quadrat ist...

Gruß
.
 
Also meinst du, diese Kreise seien aus ganz vielen kleinen Blöcken aufgebaut oder gibt es noch eine andere Methode, wie man einen Halbkreis (siehe Anhang) mit einem hitTest versehen kann, damit nur dann ein hitTest erfolgreich ist, wenn ein gegenstand den sichtbaren Bereich des anderen berührt?

Um das ganze ein bisschen zu veranschaulichen eine Frage: Kannst du bei meinem Anhang machen, dass nur dann ein "getroffen" gemeldet wird, wenn der Ball wirchlich die Linie berührt?

MfG VoodOsK
 

Anhänge

Hi,

nein, kann ich nicht, aber im Anhang findest Du ein Beispiel. Du testest nicht den Sprite-MC auf Kollision, sondern die Mauskoordinaten.

Nachteil: Bei größeren Sprites können sich die Ecken durchaus überlappen. In so einem Fall muss man etwas subtiler vorgehen: Du überprüfst laufend die Richtung der Mausbewegung mit den von mir weiter oben geposteten Winkelfunktionen und testest nicht die wirkliche Mausposition auf Kollision, sondern eine Position, die um den ermittelten Winkel und den Radius des "Sprites" davon abweicht.

Gruß
.
 

Anhänge

Zurück