{lang: 'de'}
Flashhilfe.de - Flash Community

Anfänger-Fragen zur Display List [Flash 10]

 


AntwortenRegistrieren Seite1  

Orya#1
Benutzerbild von Orya
Beiträge: 16
Registriert: Jan 2010

01.11.2010, 10:30

Hi.
Ich lese mich derzeit noch in AS3 ein, und... ich glaub ich werd bekloppt.

Die erste doofe Frage: bei AS2 gab's im Debugger ne komplette Liste der MovieClips, wie sie geordnet sind und was sich drin befindet. Finde ich beim CS5er Debugger nicht. Sollte so etwas im MovieExplorer-Fenster zu finden sein? Selbst wenn ich da alles aktiviere, sehe ich da nirgendwo MCs angezeigt. Nur ne Anzeige mit dem ersten Frame und welcher Code sich drin befindet.

Dann zweitens:
Ich habe mehrere MovieClips als Container erstellt, für ein Spiel. Nun möchte ich in ein paar Raketen-MCs auf der Bühen platzieren, innerhalb eines MCs namens "rocket_container" der sich innerhalb eines MCs namens "game_container" befindet. Also schien mir folgender Code sinnvoll:

Hier erstelle ich den MC in den das eigentliche Spiel soll:
ActionScript:
1
2
3
4
5
6
7
8
function prepare_game(evt:MouseEvent):void {
     var game_container:MovieClip = new MovieClip;
     game_container.name = "game_container";
     addChild(game_container);
     
     var game:Combat_Satellite = new Combat_Satellite(game_container);
     removeChild(evt.target.parent);
}


Hier erstelle ich den MC in den die Kanonen sollen:
ActionScript:
1
2
3
4
5
6
7
private function add_cannon():void {
     var cannon1:MovieClip = new Cannon(_game_container);
     cannon1.x = _game_container.stage.stageWidth/2;
     cannon1.y = 400;
     cannon1.name = "cannon";
     _game_container.addChild(cannon1);
}


Und nun möchte ich, wenn die Kanone abgeschossen wird, dass Raketen ihren MC bekommen in den sie alle platziert sollen. Und zwar hiermit:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
private function shoot_cannon(evt:MouseEvent):void {
     if(!_game_container.getChildByName("rocket_container")) {
        var rocket_container:MovieClip = new MovieClip;
        rocket_container.name = "rocket_container";
        _game_container.addChild(rocket_container);
     }
     
     var rocket:MovieClip = new Rocket(_game_container, x_speed, y_speed);
     rocket.x = this.x;
     rocket.y = this.y;
     _game_container.getChildByName("rocket_container").addChild(rocket);         
}


Funktioniert aber nicht. "1061: Call to a possibly undefined method addChild through a reference with static type flash.display:DisplayObject." Aber warum? Per "_game_container.getChildByName("rocket_container")" hole ich mir doch den MC in den das Zeugs rein soll, und der wird auf diesem Wege auch gefunden (wenn ich z.B. das per trace() nachprüfe). Warum kann ich dann mit der Syntax keine Raketen reinstopfen?

Ich habe das einfach mal in MovieClip(_game_container.getChildByName("rocket_container")).addChild(rocket); umgeändert und auf den ersten Blick scheint das zu funktionieren. Aber das wäre ja irgendwo Unsinn, denn schließlich ist "_game_container" ein MC, "rocket_container" ist ein MC und das was von "getChildByName()" zurückgegeben wird ist auch ein MC.

Sorry für die Anfänger-Fragen, würde mich über Hilfe freuen.
Schlagwörter: display list
Geändert von Orya am 01.11.10 um 10:44 Uhr
RustyCake#2
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

01.11.2010, 12:37