Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-10-2011, 17:27   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2009
Beiträge: 47
Kollision

Hallo,

ich weiß, es gibt verschiedene Tuts und Forumsbeiträge zum Thema Kollisionen. Aber irgendwie komme ich nicht weiter.

Ich habe drei Objekte (Ball, Wand und Stern)

Ball rollt wunderbar
Ball rollt gegen Stern - Aktion funktioniert
Ball rollt gegen Wand - und springt zurück auf die Startposition

Soweit so gut.

Habe ich jetzt eine aufwändigere Wand (sagen wir ein Labyrinth), erhalte ich beim hitTest bereits eine Aktion, wenn ich den imaginären Außenrand des Labyrinth-MC berühre.
Code:
ball.addEventListener(Event.ENTER_FRAME, moveBall);
function moveBall(evt:Event)
{
	ball.x -=  accelX * 30;
	ball.y +=  accelY * 30;

	//hittest

	if (ball.hitTestObject(wand))
	{
		// aktion zurück zum start
		ball.x = 10;
		ball.y = 10;
	}

	if (ball.hitTestObject(stern))
	{
		stern.x = -100;
		
	}
}
Wie bekomme ich die Abfrage dazu, nur die 'freien Gänge' eines Labyrints zu benutzen und nicht den mc als Außenumrandung?

Danke für jede Hilfe!

Greets,

MIKE
Mike-S ist offline   Mit Zitat antworten
Alt 18-10-2011, 17:43   #2 (permalink)
Klugscheisser
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 1.354
Wenn dein Ball eine feste Größe und Form hat, könntest Du Dir doch ein paar Eckpunkte (ein Ball hat davon immerhin unendlich viele) in ein Array (oder einen Vector.<Point>) notieren.
In deiner Abfragefunktion rechnest Du dann jeden Punkt mit der aktuellen Mausposition zusammen und macht auf das Labyrinth jeweils einen hitTestPoint mit angeschaltetem Shape Flag.

Geändert von T.Decay (18-10-2011 um 17:44 Uhr)
T.Decay ist offline   Mit Zitat antworten
Alt 18-10-2011, 17:47   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2009
Beiträge: 47
Hi,

danke für deine Nachricht. Es gibt keine Mausposition, da der Ball über den Beschleunigungssensor auf einem Pad gesteuert wird.

Gibt es keine andere Methode, um die 'durchsichtigen' Teiel eines mc zu erkennen?

MIKE
Mike-S ist offline   Mit Zitat antworten
Alt 18-10-2011, 18:07   #4 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.866
das performanteste wäre das Labyrinth als Liste von Linien zu definieren, dann ginge es nur um eine Punkt-Linie-Abstands Berechnung. und wenn die Wände dann nur senkrecht oder wagerecht stehen wird die Mathematik dahinter richtig simpel.

wenn du weiter mit Grafiken arbeitest: isch hab da mal wat vorbereitet
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 18-10-2011, 18:16   #5 (permalink)
Klugscheisser
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 1.354
Zitat:
Zitat von Mike-S Beitrag anzeigen
... Es gibt keine Mausposition ...
Na halt die Position des MC.

Den Shape Flag gibt es nur für hitTestPoint, also kannst Du nur Punkte hitTesten.
Ansonsten könntest Du noch den Ball in eine BitmapData zeichnen, das vom Ball überlagerte Rechteck des Labyrinths in eine Andere und dann für jede Pixelposition die Transparenz des entsprechendes Pixels auf beiden BitmapDatas checken. D. h. wenn auf keiner BitmapData transparent, dann hit.
Aber ich vermute mal ins Blaue hinein, dass das mehr Performance kostet.
T.Decay ist offline   Mit Zitat antworten
Alt 18-10-2011, 20:20   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
variante 1:
bei geringen geschwindigkeiten ist hitTestObject benutzbar. das testet, ob der nullpunkt des einen objektes in der kontur des anderen objektes ist. wird zu selten getestet, gleichbedeutend die bewegung geht zu weit, dann besteht die gefahr, dass die wand unbemerkt übersprungen wird.
weiterer nachteil, es ist nicht bekannt, wie weit in das hindernis eingedrungen wird.
erzeuge ein zusätzliches labyrinth, dessen mauern um den radius dicker sind. das nicht zum anzeigen, sondern nur zum hittesten benützen.

variante 2:
selbes vorgehen: die dicke des balls auf die hindernisse übertragen. dadurch reduziert sich der ball auf einen punkt. jetzt müssen die schnittpunkte berechnet werden.

siehe:
H.G.Seib
-> DragImRaum (ZIP laden) viele Rechtecke und Kreise ohne Überlagerung bewegen
und
H.G.Seib
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 19-10-2011, 06:05   #7 (permalink)
Neuer User
 
Registriert seit: Nov 2009
Beiträge: 47
Vielen Dank für alle Antworten.

Ich werde mich dann 'mal weiter einlesen in das Thema.

MIKE
Mike-S ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
hittest, kollision

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kollision / 2 swf's mb-flash Flash MX 3 13-08-2004 12:54
Kollision dreck ActionScript 1 4 23-04-2004 11:38
Kollision Edgar Flash 4 und Flash 5 1 18-10-2002 18:06
kollision superheftig Flash 4 und Flash 5 2 26-04-2002 10:24
Kollision Ken ActionScript 1 4 20-07-2001 15:57


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele