tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
2231
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Daimos00 Daimos00 ist offline Grünschnabel
    Registriert seit
    May 2007
    Beiträge
    2
    Hi,

    ich hab mich in den letzten Tagen mit Flash und AS3 beschäftigt und jetzt steh ich vor folgendem Problem:

    Ich platziere zufällig auf meiner Bühne verschiedene Childs, die per Kolision mit meiner Hauptfigur von der Bühne wieder verschwinden. Soweit funktioniert das auch. Aber ich möchte außerdem, dass nach Ablauf eines Timers ein endsprechendes Outtro-Bild gezeigt wird. Problem hier: die vorher zufällig platzierten Objekte sind noch immer sichtbar. Per removeEventListener konnte ich zumindest verhindern, dass neue Objekte erzeugt werden. Jedoch weiß ich nicht, wie ich die bereits vorhandenen von der Bühne lösche. (Genauso verhält es sich mit meiner Figur, die ich nicht von der Bühne löschen kann und somit Fehlermeldungen bekomme.

    Hier der Code:

    Code :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    
    import flash.utils.Timer;
    import flash.events.TimerEvent;
     
    // ::::::: Variablen ::
    var beweX:int = 0;
    var beweY:int = 0;
    var t_rot:Timer = new Timer (3000, 50);
    var t_gruen:Timer = new Timer (8000, 50);
    var myTimer:Timer = new Timer(1000, countZeit);
     
    var points:int = 0;
    var countZeit: int = 60;
    var zeit:int = 180;
    //*********************
     
     
     
    // ::::::::: EVENTS ::
    addEventListener(Event.ENTER_FRAME, bewegen);
     
    stage.addEventListener(KeyboardEvent.KEY_DOWN, funktionsaufruf);
    stage.addEventListener(KeyboardEvent.KEY_UP, stoppen);
     
    myTimer.addEventListener(TimerEvent.TIMER, runOnce);
    myTimer.start();
     
    t_rot.addEventListener(TimerEvent.TIMER, anzeige_rot);
    t_rot.start();
     
    t_gruen.addEventListener(TimerEvent.TIMER, anzeige_gruen);
    t_gruen.start();
    //*********************
     
     
    // Funktion zur Steuerung der Figur
    function funktionsaufruf(evt:KeyboardEvent) {
        if (evt.keyCode==Keyboard.RIGHT) {
            beweX=5;
            if (stehend_mc.currentFrame!= 2) {
                stehend_mc.gotoAndStop(2);
            }
        }
        if (evt.keyCode==Keyboard.LEFT) {
            beweX=-5;
            if (stehend_mc.currentFrame!= 3) {
                stehend_mc.gotoAndStop(3);
            }
        }
        if (evt.keyCode==Keyboard.DOWN) {
            beweY=5;
            if (stehend_mc.currentFrame!= 4) {
                stehend_mc.gotoAndStop(4);
            }
        }
        if (evt.keyCode==Keyboard.UP) {
            beweY=-5;
            if (stehend_mc.currentFrame!= 5) {
                stehend_mc.gotoAndStop(5);
            }
        }
    }
    // *********************
     
     
    // Funktion zur Erhöhung der Punktzahl
    function zaehler(zahl:int) {
        points = points + zahl;
        trace(points);
    }
    //*********************
     
     
    // Funktion zur Bewegung der Figur in verschiedene Richtungen
    function bewegen(evt:Event) {
        stehend_mc.x+=beweX;
        stehend_mc.y+=beweY;
    }
    //*********************
     
     
    // Funktion zum Anhalten der Figur
    function stoppen(e:KeyboardEvent) {
        beweX = 0;
        beweY = 0;
        stehend_mc.gotoAndStop(1);
    }
    //*********************
     
     
    // Funktion zum Erzeugen der Objekte auf der Bühne
    function anzeige_rot(evt:TimerEvent) {
        var meineIns_rot:kreis = new kreis();
        meineIns_rot.x = Math.random()*550;
        meineIns_rot.y = Math.random()*400;
        addChild(meineIns_rot);
    }
     
    function anzeige_gruen(evt:TimerEvent) {
        var meineIns_gruen:kreis_gruen = new kreis_gruen();
        meineIns_gruen.x = Math.random()*550;
        meineIns_gruen.y = Math.random()*400;
        addChild(meineIns_gruen);
    }
    //*********************
     
     
    // Funktion zur Abfrage ob die Zeit abgelaufen ist
    // und dann soll der Sprung zum Endbild kommen
    function runOnce(event:TimerEvent):void {
        countZeit = countZeit - 1;
        zeit = (zeit - 3);
        leben_mc.gotoAndStop(zeit);
        trace("runOnce() called @ " + getTimer() + " ms");
        if (countZeit <= 0) {
            myTimer.removeEventListener(TimerEvent.TIMER, runOnce);
            removeEventListener(Event.ENTER_FRAME, bewegen);
     
            stage.removeEventListener(KeyboardEvent.KEY_DOWN, funktionsaufruf);
            stage.removeEventListener(KeyboardEvent.KEY_UP, stoppen);
     
            t_rot.removeEventListener(TimerEvent.TIMER, anzeige_rot);
            t_gruen.removeEventListener(TimerEvent.TIMER, anzeige_gruen);
     
            if (points >= 0) {
                gotoAndStop(4);
            } else {
                gotoAndStop(5);
            }
        }
    }
    // *********************

    Danke für eure Hilfe
    Geändert von Daimos00 (23.12.08 um 13:21 Uhr)
     

  2. #2
    Avatar von Jens B.
    Jens B. Jens B. ist offline Damn good coffee!
    tutorials.de Premium-User
    Registriert seit
    Nov 2001
    Beiträge
    2.477
    Hallo,
    poste bitte das nächste mal nicht den ganzen ellenlangen Code, sondern nur die problemrelevanten Teile.

    Ich kenn mich zwar überhaupt nicht mit AS3 aus, aber removeEventListener löscht doch bestimmt nur den Link zwischen Eingabemöglichkeit und dann auszuführender Funktion, oder? Dann müsste es zu addChild auch einen Counterpart geben ... removeChild?

    Google nach removeChild findet das auch so. Probiers mal aus.

    http://www.tutorialized.com/view/tut...script-3/28645

    Gruß und frohe Weihnachten
    jens
     

  3. #3
    Daimos00 Daimos00 ist offline Grünschnabel
    Registriert seit
    May 2007
    Beiträge
    2
    Hi,

    erst mal sorry für den ganzen Quelltext, ich hab gedacht man kann sich das Problem besser herleiten wenn man alles kennt...

    Naja, auf die Idee mit removeChild() bin ich auch schon gekommen, Problem ist, dass ich ja mehrere "Kinder" eines Objektes anlege und der Befehl removeChild löscht bei mir zwar das letzte erzeugte "Kind", aber nicht alle der bisher erzeugten.

    Danke für eure Hilfe
     

  4. #4
    Registriert seit
    Jun 2004
    Ort
    Zürich
    Beiträge
    1.359
    Blog-Einträge
    8
    Hallo,

    in diesem Fall empfiehlt sich die Verwendung einer Kind-Liste, z.B. eines Arrays, in der du sämtliche instanzierte Kinder speicherst und bei Bedarf mittels einer Schlaufe wieder entfernen kannst:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    var liste: Array = [];
     
    var meinKind: Sprite = new Sprite();
    liste.push(meinKind);
    addChild(meinKind);
     
    for (var i: int = 0; i < liste.length; i++) {
         removeChild(liste[i] as Sprite);
    }

    Gruss
     

Ähnliche Themen

  1. Objekte auf Bühne durch dunkleren Hintergrund hervorheben
    Von T-TRAXX im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 04.01.09, 01:21
  2. Antworten: 3
    Letzter Beitrag: 11.11.08, 16:05
  3. Objekte löschen
    Von Mailyn im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 11.09.05, 10:36
  4. Alle Elemente von Ebene 0-100 von Bühne löschen?
    Von Orphelina im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 10.08.05, 14:39
  5. Antworten: 4
    Letzter Beitrag: 01.05.03, 16:52

Stichworte