Toon posts:

[ActionScript] Movieclips verwijderen van stage en resetten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik ben nu een maandje bezig met actionscript en begin er de lol van in te zien.
Momenteel ben ik bezig met een simpel spelletje.

opzet van het spel:
Gebruiker bestuurt een auto d.m.v. de navigatie toetsen.
Bovenaan komen 5 "tegenstanders" welke je neer moet schieten door op de spatiebalk te drukken.
Door een hittest verwijder ik die movieclip. (Dit moet ik nog maken).
Zodra de tegenstanders de onderkant bereikt hebben roep ik een functie aan welke de movieclips moet resetten en opnieuw de functie moet aanroepen die de tegenstanders weer bovenaan naar beneden brengt.

Functie van de tegenstander:
Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var aantalTegen:Number = 5;
for (var i:Number = 1; i<aantalTegen; i++) {
    maakNieuweTegen();
}

function maakNieuweTegen():Void {
    attachMovie("tegen_id","tegen"+i+"_mc",this.getNextHighestDepth());
    this["tegen"+i+"_mc"]._x = Math.random()*Stage.width;
    var clip_mc:MovieClip = _root["tegen"+i+"_mc"];
    clip_mc.onEnterFrame = function() {
        this._y += snelheidAuto;
        if (this._y>700) {
            resetTegen(this);
        }
    };
}


Dan de reset code heb ik nog niet.

Mijn hele source:
Flash 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
// ===== Initialisatie =====
var snelheidAuto:Number = 10;
var snelheidKogel:Number = 20;
var laserCounter:Number = 1;
var laserLevel:Number = 10;
laser_mc._visible = false;

var aantalTegen:Number = 5;
for (var i:Number = 1; i<aantalTegen; i++) {
    maakNieuweTegen();
}

// ===== Eigen Auto =====
car_mc.onEnterFrame = function() {
    if (Key.isDown(Key.UP)) {
        this._y -= snelheidAuto;
    }
    if (Key.isDown(Key.DOWN)) {
        this._y += snelheidAuto;
    }
    if (Key.isDown(Key.LEFT)) {
        this._x -= snelheidAuto;
    }
    if (Key.isDown(Key.RIGHT)) {
        this._x += snelheidAuto;
    }
    if (Key.isDown(Key.SPACE)) {
        //Code voor de laser
    }
};

// ===== Tegenstanders =====
function maakNieuweTegen():Void {
    attachMovie("tegen_id","tegen"+i+"_mc",this.getNextHighestDepth());
    this["tegen"+i+"_mc"]._x = Math.random()*Stage.width;
    var clip_mc:MovieClip = _root["tegen"+i+"_mc"];
    clip_mc.onEnterFrame = function() {
        this._y += snelheidAuto;
        if (this._y>700) {
            resetTegen(this);
        }
    };
}
function resetTegen():Void {
    //reset code
}


Het gaat hier om Actionscript 2.0

Acties:
  • 0 Henk 'm!

Verwijderd

Gewoon de _y property van het object wat je bij je aanroept meegeeft op 0 zetten?
Flash ActionScript:
1
2
3
4
function resetTegen(obj)
{
obj._y = 0;
}

Acties:
  • 0 Henk 'm!

  • ebborazor
  • Registratie: Maart 2002
  • Laatst online: 10-09-2022
voor counters (zoals o.a aantalTegen) is het trouwens beter om uint ipv Number te gebruiken. Maar daar ga je het resultaat denk ik pas van zijn als je code wat groter en complexer wordt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
(edit)

heb mijn functie terug gedaan en dit ervan gemaakt:
Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
function maakNieuweTegen():Void {
    attachMovie("tegen_id","tegen"+i+"_mc",this.getNextHighestDepth());
    this["tegen"+i+"_mc"]._x = Math.random()*Stage.width;
    var clip_mc:MovieClip = _root["tegen"+i+"_mc"];
    clip_mc.onEnterFrame = function() {
        this._y += snelheidAuto;
        if (this._y>700) {
            this._y = -200;
        }
    };
}

dit werkt nu, nu eens kijken of ik de laser aan de gang krijg.

Update
Flash 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// ===== Initialisatie =====
var snelheidAuto:Number = 10;
var snelheidKogel:Number = 20;

var snelheidLaser:Number = 10;
var laserCounter:Number = 1;
var laserLevel:Number = 100;
laser_mc._visible = false;

var score:Number = 0;

var aantalTegen:Number = 5;
for (var i:Number = 1; i<aantalTegen; i++) {
    maakNieuweTegen();
}

// ===== Eigen Auto =====
car_mc.onEnterFrame = function() {
    if (Key.isDown(Key.UP)) {
        this._y -= snelheidAuto;
    }
    if (Key.isDown(Key.DOWN)) {
        this._y += snelheidAuto;
    }
    if (Key.isDown(Key.LEFT)) {
        this._x -= snelheidAuto;
    }
    if (Key.isDown(Key.RIGHT)) {
        this._x += snelheidAuto;
    }
    if (Key.isDown(Key.SPACE)) {
        laserLevel++;
        laser_mc.duplicateMovieClip("laser" + laserLevel + "_mc", laserLevel);
        var laserClip:MovieClip = _root["laser" + laserLevel + "_mc"];
        laserClip._visible = true;
        laserClip._x = _root.car_mc._x + 40;
        laserClip._y = _root.car_mc._y - 40;
        laserClip.onEnterFrame = function() {
            this._y -= snelheidLaser;
            if(this._y < 0) {
                this.removeMovieClip();
            }
        }
    }
};

// ===== Tegenstanders =====
function maakNieuweTegen():Void {
    attachMovie("tegen_id","tegen"+i+"_mc",this.getNextHighestDepth());
    this["tegen"+i+"_mc"]._x = Math.random()*Stage.width;
    var clip_mc:MovieClip = _root["tegen"+i+"_mc"];
    clip_mc.onEnterFrame = function() {
        this._y += snelheidAuto;
        if (this._y>700) {
            this._y = -200;
            this._x = Math.random()*Stage.width;
        }
        if(this.hitTest(_root["laser" + laserLevel + "_mc"])) {
            this.removeMovieClip();
                       _root["laser" + laserLevel + "_mc"].removeMovieClip();
        }
    };
}


Werkt nu.
Alleen verwijderd hij dus de movieclip van de auto, zoals je ziet.
Ik krijg hem alleen niet meer terug, dus als ik alle vier de auto's neerknal is het afgelopen...

[ Voor 120% gewijzigd door Verwijderd op 06-04-2009 15:47 . Reden: functie ]


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom gebruik je trouwens AS2.0? Actionscript heeft met versie 3.0 een grote overhaul gehad en zit allemaal een stuk logischer en gestructureerder in elkaar. Als je toch net begint kun je net zo goed daarmee beginnen :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op maandag 06 april 2009 @ 16:15:
Waarom gebruik je trouwens AS2.0? Actionscript heeft met versie 3.0 een grote overhaul gehad en zit allemaal een stuk logischer en gestructureerder in elkaar. Als je toch net begint kun je net zo goed daarmee beginnen :)
Omdat ze bij ons op school jaren achterlopen en wij persee in AS 2.0 moeten werken.

Edit:
Opgelost, moest inderdaad de positie wijzigen.
functie gemaakt:
Flash ActionScript:
1
2
3
4
function resetClip(clipje:MovieClip):Void {
    clipje._x = Math.random()*320;
    clipje._y = -400;
}


daarheen verwijzen in de hittest.

[ Voor 22% gewijzigd door Verwijderd op 06-04-2009 19:51 ]

Pagina: 1