hitTest bei 2 duplizierte MCs

VoodOsK

Mitglied
Mein Problem:
Ich dupliziere (mehr oder weniger in zufälliger Geschwindigkeit) 2 MCs, die von links und rechts aufeinender zu kommen. Nun möchte ich, dass wenn sie sich berühren, beide verschwinden, wie mache ich das? Das Problöem bei der Sache ist ja, dass ich nicht schreiben kann:
Code:
if (this.hitTest(_root.vonLinks1)){
this.removeMovieClip();
_root.vonLinks1.removeMovieClip; 
}
Da es dann nur mt dem einen MC von Links abfragt, ich möchte aber, dass es bei allen duplizierten MCs eine Kollisionsabfrage startet. Also so etwas wie:
Code:
if (this.hitTest(_root.vonLinks**)){
wobei ** für alle vonLinks steht. Gibt es so etwas?

Hoffe konnte euch das Problem gut erklären, VoodOsK
 
Hi,

Du könntest es so angehen:
PHP:
for (var i in _parent) {
    if (typeof(_parent[i]) == "movieclip" && _parent[i] != this) {
        if (this.hitTest(_parent[i])) {
            // Zerstöre mich selbst:
           this.killMC();
            // und den Kollisionspartner:
           _parent[i].killMC();
        }
    }
}
(Wäre aber nicht sehr perfomant. Ich würde die Kollisionsabfrage wohl von außen für alle Clips vornehmen)

Gruß
.
 
Habe eine Bitte: könntest du mir das ganze mal hier einbauen?

Danke vielmals! VoodOsK

PS: Der Name der Datei ist noch etwas unsinnig :P
 

Anhänge

Im Prinzip genauso (mit for...in:
PHP:
for (var a in ct) {
	for (var b in ct) {
		if (ct[a] != ct[b] && ct[a].hitTest(ct[b])) {
			ct[a].removeMovieClip();
			ct[b].removeMovieClip();
			break;
		}
	}
}
(ct ist hierbei ein MovieClip, in dem sich Deine Clips befinden)

Alternativ könntest Du vielleicht dafür sorgen, dass die Duplikate fortlaufend benannt werden (clip1, clip2 ... clipN), wodurch Du unnötige Schleifenaufrufe vermeiden kannst, aber das erfordert beim Löschen und Neuanlegen einer Instanz u.U. auch zeitaufwendige Durchläufe zur Neubenennung der Clips.

Gruß
.
 
Ich glaub dafür bin ich zu blöde :(
Wo genau muss ich diesen Code eintragen?
Und was genau ist dieses "ct"? Die kollidierenden MCs sind beide auf der Hauptoberfläche...heisst das, ich muss anstatt "ct" " _root" hineinschreiben :confused:

Trotzdem bereits mal danke VoodOsK
 
Hi,

ich habe mal einen Container genommen, damit ich mir die Abfrage spare, ob die Objekte auch MovieClips (bzw. die richtigen MovieClips sind).

Die kollidierenden MCs sind beide
heißt das, es sind immer nur zwei Instanzen dieser Clips gleichzeitig auf der Bühne? In dem Fall könnte man sich die Schleife eigentlich sparen. ^^

Gruß
.
 
hm....nein ich glaube es sind mehrere Instanzen...aber schau es dir doch mal bitte an und Versuch eine Kollisionsabfrage reinzukriegen, welche die von links angelaufenen Männchen und die von rechts hinengeschossenen Kugeln auf eine Kollision abfragt....vielleicht kapier ichs dann :)
 

Anhänge

Hi,

setze einfach folgendes auf den Schuss-MC:
PHP:
onClipEvent(enterFrame){
	if (this._x < -8){
		this.removeMovieClip();
	}
	this._x -=10;
	for (var i in _parent) {
		if (_parent[i]._type == "mann") {
			if (this.hitTest(_parent[i])) {
				_parent[i].removeMovieClip();
				this.removeMovieClip();
			}
		}
	}
}
Und auf den "Mann" dieses:
PHP:
onClipEvent(load){
	this._type = "mann";
	schnell = random(5) + 1;
	this._x = 106;
	this._y = 221;
}

Nachteil: Mit removeMovieClip kannst Du zwar die Duplikate killen, nicht aber die Ausgangsinstanzen der beiden MCs. Ich würde Dir raten, den Schuss und das Männchen direkt aus der Bibliothek mit attachMovie zu instanzieren.

Gruß
.
 
Zurück