Flashhilfe.de - Flash Community

Wo ist der Fehler in der Kollisionsabfrage? [Flash 10]

Forum > ActionScript 3.0 > Wo ist der Fehler in der Kollisionsabfrage?

 


AntwortenRegistrieren Seite1  

 28.02.2011, 18:33 
Beiträge: 61
Registriert: Dec 2010

Wo ist der Fehler in der Kollisionsabfrage?
Hallo,

ich habe eine ganz einfache Kollisionsabfrage, bei der ein Moviclip entfernt werden soll, wenn er auf einen anderen trifft. Funktioniert soweit auch gut. Nur wird im Compilerfenster folgender Fehler angezeigt:

ArgumentError: Error #2025: Das angegebene DisplayObject muss ein untergeordnetes Element des Aufrufers sein.
   at flash.display::DisplayObjectContainer/removeChild()
   at Function/<anonymous>()


Woran kann das liegen und wie schaffe ich Abhilfe? Hab das Problem auch schon "gegoogelt" scheinen mehrere Leute schon gehabt zu haben, das Problem, aber eine Lösung fand ich nicht. Würde es etwas machen wenn ich es so lasse, weil funktionieren tut es ja....?


Beispieldatei hängt dran als CS4 + CS5!
Besten Dank.
Geändert von grafikuser am 28.02.11 um 18:43 Uhr

 01.03.2011, 17:15Re1
Benutzerbild von aprik0
Beiträge: 20
Registriert: Sep 2006

Hatte das selbe Problem vor kurzem auch. Vielleicht ist folgende Lösung für dich zutreffend (weiß ja nicht, was du machen willst):

ActionScript:
1
2
3
4
5
6
7
8
9
function entfernen(evt:Event):void
      {
           if (mc2.hitTestObject(kollision))
           {
              if(contains((MovieClip)(evt.currentTarget)))
                 removeChild((MovieClip)(evt.currentTarget));
           }
 
        }


ActionScript:
1
2
3
4
5
6
7
8
9
function oEF2(e:Event):void
      {
           if (e.currentTarget.currentFrame >= e.currentTarget.totalFrames)
           {
              e.currentTarget.removeEventListener(Event.ENTER_FRAME, oEF2);
              if(contains((MovieClip)(e.currentTarget)))
                 removeChild((MovieClip)(e.currentTarget));
           }
        }
 02.03.2011, 09:34Re2
Beiträge: 23
Registriert: Jan 2011

Kann die .fla nicht überprüfen, da ich noch mit CS3 arbeite, aber nachfolgendes Skript sollte eigentlich tun, was du wolltest. Vielleicht reicht ja der Vergleich.
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
stop();
var animStarted:Boolean = false
var moveMCs:Boolean = false;

if(stage){
     init();
}//end if(stage)
else{
     addEventListener(Event.ADDED_TO_STAGE, init);
}//end else

function init(e:Event=null){
     btn.addEventListener(MouseEvent.CLICK, startAnim);
     stage.addEventListener(Event.ENTER_FRAME, OnEnterFrame);
}//end init()

function startAnim(e:MouseEvent):void{
     if(!animStarted){
        animStarted = true;
        moveMCs = true;
        btn.label = "moving MCs";
     }//end if(!animStarted)
   else{
        //do nothing
   }//end else
}//end Anim()

function OnEnterFrame(e:Event):void{
     if(moveMCs){
        if(Boolean(mcA)){
           mcA.x += 10;
           mcA.y += 0;
           mcB.x += -10;
           mcB.y += 0;
        }//end if(mcA)
      testForHit();
     }//end if(moveMCs)
}//end OnEnterFrame()

function testForHit():void{
     if(mcA.hitTestObject(mcB)){ //für komplexere Figuren untauglich
      moveMCs = false;
        if(Boolean(mcA)){
           mcA.parent.removeChild(mcA);
        }//end if(mcA)
      btn.label = "ended";
     }//end if(mcA.hittest(mcB))
}//end testForHit()


Grundsätzlich, stelle sicher, dass:
- der MC nur einmal versucht wird, zu entfernen
- die parents des MCs ins removeChild mit einbezogen werden (in deinem Fall eher unwahrscheinliche Fehlerquelle)

Kann die .fla nicht hochladen ("grösser als die erlaubten 400.00 KB"), kann dir also lediglich eine .swf bieten: http://www.swfcabin.com/swf-files/1299052241.swf

Das init() ist eigentlich unnötig (die EventListener allerdings nicht).
Geändert von Tom786 am 02.03.11 um 09:40 Uhr

 
nicht sichtbar bei eingeloggten Mitgliedern1&1 Webhosting
 29.03.2011, 17:48Re3
Beiträge: 61
Registriert: Dec 2010

Themenautor/in

Hallo nochmals,

bis jetzt bin ich mit der Lösung von "aprik0" ganz gut gefahren, nun habe ich aber folgendes Problem: Es soll zusätzlich auch noch ein Ton abgespielt werden bei der Kollision, was auch geht, nur wird der Ton mehrfach abgespielt, d. h. es werden mehrere Kollisionen erkannt obwohl nur eine stattfindet. Kann mir einer den Grund und bestenfalls auch noch eine Lösung dafür präsentieren ;-)
 12.04.2011, 21:16Re4
Benutzerbild von aprik0
Beiträge: 20
Registriert: Sep 2006

Werden wirklich mehrere Kollisionen erkannt oder läuft der Ton nur in einem Loop?


- Stefan
 13.04.2011, 15:21Re5
Beiträge: 61
Registriert: Dec 2010

Themenautor/in

Also der Ton wurde mehrfach abgespielt, hab das aber nun schon irgendwie hinbekommen. Frag mich nicht wie, hab einfach ein bissl rumprobiert mit deiner Lösung. ;-)
Geändert von grafikuser am 13.04.11 um 15:22 Uhr

 
nicht sichtbar bei eingeloggten Mitgliedern
 
Themen
Ähnliche Beiträge zum Thema
 

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.
Partner Webseiten: DesignerInAction.de   Designnation.de   Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   PSD-Tutorials.de   Tutorials.de

Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2012 Sebastian Wichmann - Flashhilfe.de