Objektorientierte Spieleprogrammierung in Flash

Hallo,

Bei Array.splice() müssen ja alle nachfolgend verschoben werden.
Daran wirds wohl kaum liegen. Führ mal diesen Test hier aus:
Code:
var ary: Array = ["eins", "zwei", "drei", "vier"];
trace ("Element an Index 2: "+ ary[2]);
trace ("Ursprüngliche Länge: "+ary.length);
trace ("*** Folgendes Element wird entfernt: "+ary.splice (2,1)+" ***");
trace ("Jetzige Länge: "+ary.length);
trace ("Element an Index 2: "+ ary[2]);

gruss
 
Zuletzt bearbeitet:
@luke: Ich sehe nicht ganz, worin Ihr Euch nun wiedersprecht ...

(halbwegs) @Topic: Jungs, ich denke kaum, dass so etwas bei einem 2D-Spiel ins Gewicht fällt - es ist ja nicht so, dass alle paar Millisekunden etliche Elemente aus riesigen Arrays gelöscht werden müssen. Performanceprobleme in Flashspielen entstehen eher durch komplexe Bildaktualisierungen oder Schleifen/Rekursionen, die andauernd durchlaufen werden müssen (z.B. Kollisionen/Winkelberechnungen bei 50 Objekten).

Gruß
.
 
Hallo,

@Tobi:
Ich sehe nicht ganz, worin Ihr Euch nun wiedersprecht ...
Wenn timäää manuell verschieben meint, dann liegt das Problem auf der Hand, wenn nicht, dann weiss ich es selber nicht :confused:...

Ansonsten spricht mir dein Post aus der Seele. Ausserdem wüsste ich, der Arrays bis dato für Kollisionsgrids und ähnliches missbraucht hat und zwar im Glauben, es wäre die performance-schonenste Methode, die es in AS 2.0 gibt, was genau an diesen verflixten Arrays denn auf die Leistung schlägt u nd wie man das umgehen kann/soll.

gruss
 
So... hab hier mal meine LineareListe angehängt. Könnt mir ja mal sagen was ihr davon haltet. Ich finde die is teilweise besser geeignet für die Sache (Suchfunktion schon integriert); (<- hahaha! Ich schreib schon automatisch hinter jede Klammer nen Semikolon. ich glaub ich programmier zuviel:) )
 

Anhänge

  • 25840attachment.zip
    5,7 KB · Aufrufe: 15
Eine dynamischer Ring ist eine eine Liste/Schlange die jedoch kein Ende oder Anfang hat. Das letzte Elemente verweißt dann nicht auf ein leeres Element sondern auf den "Anfang". Das ermöglicht eine kontinuierliches durchgehen aller Objekte ohne ständig ein Array von vorne bis hinten durchlaufen zu müssen, das Entfernen oder Einfügen eines Objektes ist mit sehr wenig Aufwand getan und es ist Perfomanter als jedes Array.

Und selbst bei 2d-Spielen sollte man nicht Ressourcen verschwenden, denn Du weißt nie auf welcher Kiste Dein Spiel später läuft.

Navy
 
Ok. Ich bin jetz schon ein gutes Stück weiter.
Allerdings hab ich jetz ein anderes Problem:
Da im Spiel alle möglichen Objekte Dynamisch erzeugt werden, brauche ich eine Art "Datenbank" aus der ich dann alle möglichen Standartwerte auslesen kann (zb. Genertyp 1 hat eine Lebensernergi von 50). Ich hab nur leider noch keine gescheite Idee wie ich diese realisieren soll.
Wichtig ist auf jeden fall das die Werte beim Start des spiels von außerhalb der .swf eingelesen werden sollen, um das ganze leichter erweiterbar zu machen...
 
Hallo,

Eine dynamischer Ring ist eine eine Liste/Schlange die jedoch kein Ende oder Anfang hat.

Aus Interesse: Wie wird diese Liste erstellt bzw. woraus besteht sie? Jedes Objekt hat sozusagen eine Sibbling-Referenz als Member, oder wie funktioniert das?

gruss
 
Na super... hab schon wieder nen Problem. Kann man beim erzeugen von Objekten auch per Variable bestimmen was für eine Klasse von Objekt erzeugt wird?
Man hat zum beispiel zwei verschieden Klasse: "Apfel" und "Birne" und was ich jetz bräuchte wär sowas:
PHP:
import Apfel;
import Birne;

function createObst("neuesObst"):Object
{
   return(obst = new "neuesObst");
}
var birne1 = createObst("Birne");
var apfel1 = createObst("Apfel");

Ich hoffe ihr versteht was ich meine....:confused:
 
> Aus Interesse: Wie wird diese Liste erstellt bzw. woraus besteht sie? Jedes Objekt hat
> sozusagen eine Sibbling-Referenz als Member, oder wie funktioniert das?

Ich machs mal als Pseudocode

Code:
class Object
  name : string
  eigenschaft 1: string;
  [...]
  NextObject : Object;

Man verweist also einfach auf ein nächstes Objekt, welchs wiederum wieder auf das nächste verweist. Bei nur einem Element verweis dieses auf sich selber.

Navy
 
Zurück