[GastForen Archiv Adobe Flash & ActionScript Zufällig mehrere Objekte generieren (wie bei V2B-CD)

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Archiv - Archivierte Foren
Themen
Beiträge
Moderatoren
Letzter Beitrag

Zufällig mehrere Objekte generieren (wie bei V2B-CD)

Canio
Beiträge gesamt: 174

10. Jan 2006, 11:31
Beitrag # 1 von 4
Bewertung:
(1282 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich geb's zu, ist ne Menge Code. Aber ich hab eigentlich nur ein kleines Problem ...
Und zwar schaffe ich es mit untenstehendem Code, ein Objekt mit zufälliger Position auf die Bühne zu bringen. Klappt alles wie ich will, nur die Anzahl ist immer falsch.
Obwohl mit spinnen.bedarf festlege, dass ich sieben Spinnen haben möchte, ist es immer nur eine.
Erst wenn diese sich selbst entfernt kommt eine neue nur. Ich will aber sieben!

Kann den Fehler einfach nicht finden :(

Würd mich freuen, wenn mich einer drauf stoßen würde. Das Prinzip hab ich übrigens von der V2B-CD für Spiele.

Code
 
var buehne = _root._height;
// Erzeugung eines Spinnenobjekts
var spinnen:Object = new Object ();
spinnen.speed = 5;
spinnen.gesamtzaehler = 0;
spinnen.aktive = 0;
spinnen.bedarf = 7;
// Generieren der Spinnen
for (var i = 0; i < spinnen.bedarf; i++)
{
spinnen.gesamtzaehler = i;
var name = "spinne_" + spinnen.gesamtzaehler + "_mc";
// generieren einer zufälligen Position
var xpos = Math.round (Math.random () * _root._width);
var ypos = Math.round (Math.random () * _root._height);
generiereSpinnen (name, xpos, ypos);
//spinnen.gesamtzaehler++;
}

// Erneuert die Spinnen und stellt den Bedarf zufrieden
_root.onEnterFrame = function ()
{
if (spinnen.aktive < spinnen.bedarf)
{
for (var i = 1; i <= spinnen.bedarf - spinnen.aktive; i++)
{
var name = "spinnen_" + game.gesamtzaehler + "_mc";
// Zufällige x-Position
var xpos = Math.round (Math.random () * _root._width);
generiereSpinnen (name, xpos, _root.getNextHighestDepth ());
}
}
};
function generiereSpinnen (spinnenname, xpos, ypos)
{
// Anhängen der Spinne in die Spinnennbox
_root.spinnenBox_mc.attachMovie ("spinnePreloader", spinnenname, _root.getNextHighestDepth ());
// Anpassung der Größe
_root.spinnenBox[spinnenname]._width = 170;
_root.spinnenBox[spinnenname]._yscale = 70;
// Positionierung der neuen Spinne
_root.spinnenBox_mc[spinnenname]._x += xpos;
_root.spinnenBox_mc[spinnenname]._y += ypos;
// Anhängen der Funktionalitäten
_root.spinnenBox_mc[spinnenname].onEnterFrame = dropSpider;
// Setzt den gesamtzaehler (eindeutige Nummer der Spinne) und auch
// die Nummer der aktiven Spinnen
_root.spinnen.aktive++;
}
function dropSpider ()
{
this.loaded_mc.loaded_txt.text = getPercent ();
this._y += _root.spinnen.speed;
if (this._y > buehne + this._height)
{
//trace("wech");
// entfernt sich am unteren Rand der Bühne selbst
spinnen.aktive--;
this.removeMovieClip ();
}
}
// ermittelt die geladenen Bytes und gibt sie als Prozentwert zurück
function getPercent ()
{
var gesamtBytes = _root.getBytesTotal ();
var momentanBytes = _root.getBytesLoaded ();
var geladen = 0;
geladen = momentanBytes * 100 / gesamtBytes;
var percent = geladen + " %";
return Math.round (geladen);
}

X

Zufällig mehrere Objekte generieren (wie bei V2B-CD)

hmaus
Beiträge gesamt: 692

11. Jan 2006, 18:51
Beitrag # 2 von 4
Beitrag ID: #204415
Bewertung:
(1245 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Canio,

also, habe mal Dein Script durchgeschaut.

Auf jeden Fall solltest Du nicht _root.getNextHighestDepth () für die Levelbestimmung Deiner neuen Spinne verwenden. Dies ergibt immer das gleiche level. kannst Du durch ein trace() herausfinden. Habe auf der CD hierfür über _root.spinnen.gesamtzaehler jeweils ein neues Level genommen.

Zudem verstehe ich einige Zeilen in Deinem Skript noch nicht, aber vielleicht kommst Du mit oben genannter Änderung schon mal weiter.

Warum das hier?

generiereSpinnen (name, xpos, _root.getNextHighestDepth ());

Grüße

Helge


als Antwort auf: [#204033]

Zufällig mehrere Objekte generieren (wie bei V2B-CD)

Canio
Beiträge gesamt: 174

12. Jan 2006, 08:35
Beitrag # 3 von 4
Beitrag ID: #204467
Bewertung:
(1236 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Helge,
danke für den Hinweis.
Code
generiereSpinnen (name, xpos, _root.getNextHighestDepth ()); 

ist natürlich quatsch, stattdessen habe ich geschrieben
Code
generiereSpinnen (name, xpos, 0); 

, denn die nachfolgenden Spinnen sollen ja bei der y-Position 0 anfangen.

Ich hab immer gedacht, getNextHighestDepth() gibt mir immer die nächstgrößte Tiefe aus! Hab ich ersetzt durch die Variable spinnen.depth = 1000, die ich dann inkrementiere. Sieht jetzt so aus:
Code
var buehne = _root._height; 
// Erzeugung eines Spinnenobjekts
var spinnen:Object = new Object ();
spinnen.speed = 5;
spinnen.gesamtzaehler = 0;
spinnen.aktive = 0;
spinnen.bedarf = 5;
spinnen.depth = 1000;
// Generieren der Spinnen
for (var i = 0; i < spinnen.bedarf; i++)
{
spinnen.gesamtzaehler = i;
var name = "spinne_" + spinnen.gesamtzaehler + "_mc";
// generieren einer zufälligen Position
var xpos = Math.round (Math.random () * _root._width);
var ypos = Math.round (Math.random () * _root._height);
generiereSpinnen (name, xpos, ypos);
//spinnen.gesamtzaehler++;
}
// Erneuert die Spinnen und stellt den Bedarf zufrieden
_root.onEnterFrame = function ()
{
if (spinnen.aktive < spinnen.bedarf)
{
for (var i = 1; i <= spinnen.bedarf - spinnen.aktive; i++)
{
var name = "spinnen_" + game.gesamtzaehler + "_mc";
// Zufällige x-Position
var xpos = Math.round (Math.random () * _root._width);
generiereSpinnen (name, xpos, 0);
}
}
};
function generiereSpinnen (spinnenname, xpos, ypos)
{
// Anhängen der Spinne in die Spinnennbox
_root.spinnenBox_mc.attachMovie ("spinnePreloader", spinnenname, _root.spinnen.depth);
_root.spinnen.depth += 1;
// Anpassung der Größe
_root.spinnenBox[spinnenname]._width = 170;
_root.spinnenBox[spinnenname]._yscale = 70;
// Positionierung der neuen Spinne
_root.spinnenBox_mc[spinnenname]._x += xpos;
_root.spinnenBox_mc[spinnenname]._y += ypos;
// Anhängen der Funktionalitäten
_root.spinnenBox_mc[spinnenname].onEnterFrame = dropSpider;
// Setzt den gesamtzaehler (eindeutige Nummer der Spinne) und auch
// die Nummer der aktiven Spinnen
_root.spinnen.aktive++;
}
function dropSpider ()
{
this.loaded_mc.loaded_txt.text = getPercent ();
this._y += _root.spinnen.speed;
if (this._y > buehne + this._height)
{
//trace("wech");
// entfernt sich am unteren Rand der Bühne selbst
spinnen.aktive--;
this.removeMovieClip ();
}
}
// ermittelt die geladenen Bytes und gibt sie als Prozentwert zurück
function getPercent ()
{
var gesamtBytes = _root.getBytesTotal ();
var momentanBytes = _root.getBytesLoaded ();
var geladen = 0;
geladen = momentanBytes * 100 / gesamtBytes;
var percent = geladen + " %";
return Math.round (geladen);
}


Bin einen Schritt weiter dank dir, ich seh jetzt tatsächlich so viele Spinnen wie wollte. Doch nach dem ersten Durchgang, d. h. wenn alle Spinnen am unteren Rand entfernt worden sind, tauchen die neuen alle bei den Koordinaten (0,0) auf und bewegen sich nicht mehr. Die bleiben alle in der oberen linken Ecke hängen. Ich fürchte mir fehlt irgendwie der Durchblick.

Beim _root.onEnterFrame mach ich etwas falsch, aber was?


als Antwort auf: [#204415]

Zufällig mehrere Objekte generieren (wie bei V2B-CD)

Canio
Beiträge gesamt: 174

24. Jan 2006, 11:04
Beitrag # 4 von 4
Beitrag ID: #206741
Bewertung:
(1193 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Kann mir keiner helfen? Das Problem krieg ich nicht allein gelöst :(


als Antwort auf: [#204467]
X