[AS3] OOP - Strukturierungsprobleme

Marius Heil

Erfahrenes Mitglied
Hallo,

ich schreibe gerade mein Jump and Run von AS2 nach AS3 um. Das Spiel unterstützt eine Vielzahl von Materialien wie Luft, Wasser, Boden, Eis, etc...
Ich habe bisher folgenden Aufbau:
Die Character Klasse verwaltet Bewegung und Kollision
Die World Klasse verwaltet das komplette Level
Die Tile Klasse beinhaltet einen MC der den korrekten Block anzeigt

Jetzt ergibt sich folgendes Problem: Soll ich eine Material Klasse erstellen von er für jedes Material eine neue Instanz erzeugt wird, die Instanzen in einem Array speichern und von der Tile Klasse darauf referenzieren....

oder

Soll ich in der Tile-klasse ein Objekt erzeugen in welchem alle Materialinformationen abgelegt werden.

Mir geht es zum einen um die korrekte Struktur, da ich noch nciht so lange Objektorientiert programmiere besteht da noch Lernbedarf. Andererseits aber auch um die Effizienz: Wenn ich jedes mal ein Objekt erzeuge muss das immer mit allen Variablen gefüllt werden. Wenn ich eine eigene Klasse nehme kann ich die final machen und die Variablen existieren bereits alle mit Typendefinition.

Hier der Anfang meiner Materialklasse:
PHP:
public class Material {
		public var mcFrame:uint;		//Graphical Representation
		public var name:String;			//Name of Material
		public var type:String;			//Type (gas, fluid, hard)
		public var gravity:Number;		
		public var friction:Number;
		public var xAcceleration:Number;//Possible acceleration in x-direction
		public var yAcceleration:Number;//according to above
		public var xSpeedMax:uint;		//Max Speed in x-direction
		public var ySpeedMax:uint;		//s.o.
		public var enterLeft:Boolean;	//Collision when Entering from Left
		public var enterRight:Boolean;	//..
		public var enterTop:Boolean;	//..
		public var enterBottom:Boolean;	//..
		public var kills:Boolean;		//Die on Entering Material
		public var isBottom:Boolean;	//1px under character, able to jump
		public var inFront:Boolean;		//Before Character
		public var trigger: String;		//Special Trigger for spawn, exit, vanish, etc...
		
		public function Material(mcFrame:uint,  ) {
			
		}		
	}
Wie mach ich das eigentlich möglichst Tippeffizient? Bei dem Ansatz muss ich jetzt im Konstruktor für jede Variable den Typ angeben (dopplung) und dann schreiben this.mcFrame = mcFrame;
Das kommt mir etwas arg kompliziert vor, geht das einfacher?

Viele Grüße
 
Hey.
Ich kenne dein Spiel nicht deswegen frag ich mal:
Gibt es denn Tiles ohne Materialien? Gibt es Tiles mit mehreren Materialien? Gibt es Materialien ohne Tiles? Was ist alles in der Tile-Klasse enthalten? Kann man das Spiel irgendwo spielen? (die alte Version in AS2)
 
Hi,

keine Tiles ohne Materialien, auch die Luft besitzt ja Gravitation, etc...
Tiles mit mehreren Materialien gibt es auch nicht, immer eindeutig
Materialien ohne Tiles sind unnötig, da ich ein Material ja nur benutzen kann wenn es sich irgendwo sichtbar auf der Bühne befindet.
Die Tilesklasse soll die wichtigen Werte bereitstellen, sodass der Character bei der Bewegungsberechnung auf die Werte zurückgreifen kann. Außerdem macht sie noch wichtige Dinge wie BitmapCaching, Animation / Zerstörung mancher Teilchen.
Das Spiel ist bisher noch ein wenig geheim, mag es noch nicht zu viel rumzeigen, kommt aber in nicht allzulanger Zeit ;-)

VIele Grüße
 
keine Tiles ohne Materialien, auch die Luft besitzt ja Gravitation, etc...
Tiles mit mehreren Materialien gibt es auch nicht, immer eindeutig

In dem Fall würde ich erstere Variante nehmen, also eine Material-Klasse, auf die dann von den Tiles aus referenziert wird. Erscheint mir am sinnvollsten, meine OOP-Kenntnisse beschränken sich aber auch auf nur 4-5 Projekte. Kannst ja mal einen Link posten oder mir schicken wenn's fertig ist, bin neugierig :)
 
keine Tiles ohne Materialien, auch die Luft besitzt ja Gravitation, etc...

Am saubersten wäre das über eine Fabrik
.

Implemtentiere in deiner Anwendung einer Abstrakte Materalklasse (Product) von der du die einzelnen Materialen mit Ihren Eigenschaften und Methoden in Konkrete unterklassen kapselst.
Deine Tiles(Lufttile, Bodentile, ...) nehmen dann die Rolle der Creator ein die dann das notwendige Materialobjekt ,also das Product, erzeugen.
 
So, sorry für die lange Wartezeit.
Ich hab es jetzt wirklich mit ner Fabrik gemacht, funktioniert auch gut, so langsam klappt der Großteil, meine einzige Befürchtung ist derzeit, dass mein Spiel zu realitätsgetreu wird :D

Danke euch beiden :)
 

Neue Beiträge

Zurück