hitTest()

K

Kebb

Hallo. Ich habe mal eine fla erstellt wo ich
einen MC "player",
einen "content"
und einen "blockade" im "content" MC habe.

Nun wird der Tastatur der "content" MC bewegt, was zur folge hat das es so ausschaut als würde der "player" MC sich auf der "Karte" bewegen. Der "blockade" MC ist Oval. Nun hat der "player" MC folgendes Script:

Code:
onClipEvent (load) {
       this.onEnterFrame = function() { 
	 if (this.hitTest(_root.content.blockade)) {
 	      _root.topblock = true;
	 }
	 else {
	      _root.topblock = false;
	 }
       }
}

Wie kann ich es so umschreiben, dass der nun aber nicht schon am Rand des "blockade" MS's abblockt, sondern erst am Rand des Inhaltes?

Und wie schaffe ich es, dass er bei einer Berührung
von unten _root.topblock auf true,
von oben _root.bottomblock auf true,
von left _root.rightblock auf true
und von rechts _root.leftblock auf true setzt?

Ist das möglich?
 
Hi,

hmm, damit hab ich mich auch diverse Male beschäftigt. Zunächst: vergiss hitTest, sondern teste die Kollision anhand der Koordinaten lieber selbst. Um die Richtung, aus der die Kollision erfolgt, zu testen, kannst Du die Bewegungsrichtung des Objektes verwenden (wenn es sich nach oben bewegt, eben topblock auf true setzen usw.), oder bei festgestellter Kollision prüfen, ob sich das kollidierende Objekt unter- oder oberhalb (bzw. links oder rechts) des Mittelpunktes des zu kollidierenden Objektes befindet.

Gruß

.
 
Hmm, das wären aber Tausende von Kooridinaten die ich berücksichtigen müsste, die "Karte" soll groß werden...
 
Dann verstehe ich Deinen Aufbau wohl nich so ganz. Schreib doch statt hitTest eine ähnliche Funktion wie diese:
PHP:
function collision(obj1, obj2) {
    var direction = new Object();
    direction.x = ((obj1._x - obj1._width / 2) < (obj2._x - obj2._width / 2)) ? -1 : 1;
    direction.y = ((obj1._y - obj1._height / 2) < (obj2._y - obj2._height / 2)) ? -1 : 1;
    return direction;
}
das ist nur ein sehr simples Beispiel, das die Bewegungsrichtung nicht berücksichtigt, sollte aber bei einer (rechteckigen) Kollision das Positionsverhältnis zurückgeben.

Gruß

.
 
Also ich will ein Spiel bauen. Eine Art Rollenspiel. Man läuft auf einer großen KArte rum mit Gebäuden, Bergen, etc. Und überall wo ein Berg oder ein Gebäude ist soll der Spieler nicht "durchlaufen" können. Das wären dann jede Menge Ecken nud Kanten und auch Rundungen wo der Spieler nicht weiter kann. Und da dachte ich an HitTest (x, y, true) wobei das letzte true dafür da ist bei Berührung des Shapes und nicht der Objektkannte die Berührung bemerkt wird. Sonnt müsste ich ja alle Koordinaten die es auf der gazen Karte gibt mit berücksichtigen... Und Berge etc sind nun mal leider nicht rechteckig :)
 
Zuletzt bearbeitet von einem Moderator:
Hi,

hitTest mit dem ShapeFlag funktioniert nur, wenn als Referenz ein einzelner Punkt (z.B. die Mausposition) angegeben wird; die formgenaue Kollision zweier Clips kannst Du damit nicht prüfen (dann müsste Flash diese rechenintensive Aufgabe übernehmen, zahllose Koordinatenpaare zu überprüfen).

Entweder, Du gibst Dich mit einer gröberen Objektkollision zufrieden (wenn nicht rektangular, dann vielleicht nach Radius?), oder Du überprüfst mehrere Koordinaten, aber schränkst die Suche intelligent auf einen Bereich in der Nähe Deines Sprites ein. Dadurch kannst Du zunächst alle Objekte, die sich z.B. weiter als 10 Pixel vom MovieClip entfernt befinden, durchs Raster fallen lassen, und die übrigen, in Frage kommenden, genauer unter die Lupe nehmen.

Eine "Patentlösung" ist mir für diese Aufgabenstellung nicht bekannt; ein wenig "tricksen" wirst Du wohl müssen.

Gruß


P.S.: als Hilfestellung kannst Du vielleicht herausfinden, welcher Punkt Deines Sprites dem "Berg" am nächsten ist (Winkel und Entfernunf; Umrechnung von Polar- in kartesische Koordinaten), und mit diesem Punkt einen hitTest mit ShapeFlag auf den Berg durchführen.
.
 
Zuletzt bearbeitet:
Also ich habe mir jetzt folgende ÜBerlegungen gemacht:

Da der Player ja nun auch fast Punktförmig ist wollte ich prüfen lassen ob playerx und playery das Shape vom Berg berühren. playerx und playery werden ständig aktualisiert. Nun stellt sich aber auch hier ein Problem. Und zwar bewegt sich ja nicht der Player sondern die "Welt" bewegt sich. Also der Berg kommt zum Spieler und nicht andersrum. Und somit geht das nun auch wieder nicht, weis aber nicht wieso. Denn auch wenn der Player statisch ist kommt er doch trotzdem zum Berg, weil dieser sich ja zu ihm hin bewegt. Naja egal es geht halt nicht... Ich habe mal die fla hier angehängt. Wenn jemand Lust und Zeit hat fänd ich es toll wenn er sich das mal anschauen könnte. Es sieht nicht toll aus, ist halt nur eine Übungs-fla. Hochlaufen geht aber momentan nicht mehr, keine Ahnung warum.

Danke schonmal bis hier hin!

PS: Das Script zum Bewegen des "content" MC's liegt unten links in der kleinen Box...
 

Anhänge

Zurück