Ebenen und Tiefen. Wieso nicht beides?

TreX2006

Grünschnabel
Hallo erstmal,
ich hab hier mal wieder ein Problem.

Ich möchte ein kleines Flash Spiel Programieren. Ist ziemlich Simpel vom Code her. Aber um es Visuel gut hinzukriegen fehlt mir noch einiges an ....... Erfahrung

Das Spielfeld selbst wird mit Action Script zusammen gepuzzelt. Im Hintergrund wolte ich dann noch eine Ebene haben die nur der Schönheit dienen soll und im Vordergrund das Selbe bloß mit Steuerungsschaltflächen. Wie mache ich das nur. Ich kann nichts in die Ebenen zeichnen, da alles vom Spielfeld überdeckt wird. Und ich kan auch nicht mehr als 1 Elemente mit AS zusätzlich dranfügen, denn dann fängt alles an zu verschwinden. Vielleicht hab ich da was verkehrt gemacht.
PHP:
fscommand("allowscale", false);
fscommand("allowscale", false);
//Definieren und speichern der 4 verschiedenen Felder
game = {};
game.Tile0 = function () {};
game.Tile0.prototype.frame = 1;
game.Tile1 = function () {};
game.Tile1.prototype.frame = 2;
game.Tile2 = function () {};
game.Tile2.prototype.frame = 3;
game.Tile3 = function () {};
game.Tile3.prototype.frame = 4;

//Platzhalter für Map Array(sonst funktioniert nichts kein Plan wieso)
myMap = [[],[],[],[],[]];
writeMap();
//Funktionen Definieren und ihre Zusammenwirkung bestimmen
//Wird mal die Funktion zum drehen der Ringe, bischer nur ring 3 nach links
function rotateleft(myMap) {
	temp = [];
	temp = myMap[3].slice() ;
	myMap[3][0] = temp[1];
	myMap[3][1] = temp[2];
	myMap[3][2] = temp[3];
	myMap[3][3] = temp[4];
	myMap[3][4] = temp[5];
	myMap[3][5] = temp[6];
	myMap[3][6] = temp[7];
	myMap[3][7] = temp[0];
	
buildMap(myMap);
}


//Map array wird mit Zufalswerten von 0 bis 3 gefüllt
function writeMap() {
for (var t = 0; t<5; ++t) { 
  for (var s = 0; s<8; ++s) {
			var x = Random(2);
			myMap[t][s] = x;
			}
}
szpruefen();
}


//Wird geprüft welche Tasten aktiviert sind	
function detectKeys() {
if (Key.isDown(Key.UP)) {
    writeMap();
	buildMap(myMap);
	
  }
  if (Key.isDown(Key.LEFT)) {
    rotateleft(myMap);
	szpruefen ();
  }
}
//debug wiedergabe, da debug aufrufen mittlerweile nervt
    function display() {
	a=spaltegleich[0];
	b=spaltegleich[1];
	c=spaltegleich[2];
	d=spaltegleich[3];
	e=spaltegleich[4];
	f=spaltegleich[5];
	g=spaltegleich[6];
	h=spaltegleich[7];
	}
//Prüfe ob Spalten oder Zeilen gleich sind
function szpruefen (){
spaltegleich = [];//spalten checken
for(var ii = 0; ii<8; ++ii) {
	 aktzeilegleich= true;
   for(var jj = 1; jj<5; ++jj) { 
        if(myMap[jj][ii] != myMap[0][ii]){
			        aktzeilegleich = false;
					 }  
			}
if (aktzeilegleich == true){
	spaltegleich[ii] = true;
}
else {
	spaltegleich[ii] = false;
	
}
}


zeilegleich = []; //Zeilen checken
for(var ii = 0; ii<5; ++ii) {
	 aktzeilegleich= true;
   for(var jj = 1; jj<7; ++jj) { 
       
	
		  if(myMap[ii][jj] != myMap[ii][0]){
			        aktzeilegleich = false;				
}  
}  
if (aktzeilegleich == true){
	zeilegleich[ii] = true;
}
else {
	zeilegleich[ii] = false;
}
}
display();
}


// Generieren des Spielfeldes
function buildMap(map) {
	_root.attachMovie("empty", "tiles", 1);
	game.clip = _root.tiles;
	for (var i = 0; i<5; ++i) {
		for (var j = 0; j<8; ++j) {
			var name = "ring_"+i+"zelle_"+j;
			game[name] = new game["Tile"+map[i][j]]();
			game.clip.attachMovie("r"+i, name, i*100+j*2);
			game.clip[name]._x = (200);
	        game.clip[name]._y = (200);
			game.clip[name]._rotation += j*45;
			game.clip[name].gotoAndStop(game[name].frame);
        }
	}
}
//Map generieren damit man am Anfang auch was stehen hat.
buildMap(myMap);
stop();

Hier mal wie es bischer aussieht und funktioniert. http://patchworx.funpic.de/hb.swf

Helft mir bitte wie ich am besten schaltflächen über dem Spielfeld einblenden kann, hab schon alles versucht und hänge hier seit ein paar Tage ohne Fortschritt.
 
Zuletzt bearbeitet:
Hi,

Dein Link verweist ins Leere - ich bekomme einen 404.

Aus Deinem Code kann ich auf die Schnelle Dein Gesamtsetup nicht extrapolieren - es wäre hilfreich, wenn Du die .fla zur Einsicht posten würdest.

Generell dienen Ebenen nur zur Strukturierung der Stapelreihenfolge zur Entwurfszeit - die eigentliche Reihenfolge wird zur Laufzeit durch Tiefen festgelegt. Es sollte problemlos möglich sein, beliebige Objekte übereinander zu legen, indem Du die entsprechenden Tiefen per attachMovie bzw. createEmptyMovieClip korrekt zuweist.

Gruß
.
 
Sry, ich war sehr in Eile. Habe zwar noch realisiert das es nicht ging, aber keine zeit neu zu schreiben. Hab das jetzt behoben. Was ich noch gerne wissen würde, kan man mehrere Schaltflächen in ein Symbol reinlegen und dieses dann mit attachMovie an fügen und dann noch die Schaltflächen gemäß ihrem Zweck abfragen und verwenden?

Hier ist die Fla datei, ich kriege beim besten willen keine MClips mehr eingefügt, doch einer geht, aber dann ist schluß. http://patchworx.funpic.de/hb.fla

Und hier eine Skize die ich schnell im Reli Unterricht gemacht habe. http://patchworx.funpic.de/hb.jpg
Das was dort im Roten kasten steht ist wichtig. Es sollen halt mindestens 3 Layers sein in der Mitte der Kreisel, oben die Schaltflächen und unten BG mit alen möglichen Anzeigen.

Wen sich jemand fragt was die ganzen trues und falses bei der .swf sein sollen, sie zeigen jeweils an welche segmente des Kreises die gleiche Farbe haben. Testtasten sind: oben = neue map generieren und links, einen Ring nach links drehen, sol später alles per Maus und Schaltflächen gesteuert werden.

ThX im Vorraus
TreX

PS: Vielleicht hilft es euch. Ich hab das wesentliche aus dem Tutorial über TileBasedGames von Tonypa entnommen. tonypa.pri.ee/tbw/

PS2: Hab hier "rumexperemintiert"
PHP:
//mache ich das so, dann kann ich die das Teil noch irgendwie verschieben.
	
game.clip.attachMovie("oberflaeche", "ober", 10000);
	game.clip.ober._x = 300;
        game.clip.ober._y = 100;
// Füge ich dieses dazu verschiebt sich ALLES nochmal.
        game.clip.attachMovie("char", "char", 10002);
	game.clip.char._x = 300;
        game.clip.char._y = 100;

// versuche ich diesen code zu machen, klapt garnichts
	for(i=1;i<16;i++){
_root.attachMovie("test","test"+i,10000+i);
_root["test"+i]._x = 10000+i*10;
 
Zuletzt bearbeitet:
Hi,

Dein Code ist in meinen Augen recht unübersichtlich. Mir ist auch nicht ganz klar, was Du wo instanzieren willst und warum das nicht funktioniert. Generell solltest Du folgendes bedenken:

Objekte, die sich zur Entwurfszeit auf der Bühne befinden, bekommen negative Tiefenebenen zugewiesen. Zur Laufzeit kannst Du mit der Methode getNextHighestDepth die nächsthöhere freie Tiefenebene herausfinden.

Selbstverständlich kannst Du mehrere MovieClips oder Schaltflächen in einem gemeinsamen Container zusammenfassen - entweder, indem Du den Container zur Entwurfszeit erstellst und mit den Unterobjekten füllst, oder indem Du ihn zur Laufzeit erstellst:
Code:
var bgnd = this.createEmptyMovieClip("bgnd", 1);
// in "bgnd" kannst Du Hintergrundgrafiken einfügen:
bgnd.attachMovie("bgnd_picture", "pic", 1);

var ct = this.createEmptyMovieClip("ct", 2);
// in "ct", der über dem Clip "bgnd" liegt, kannst Du auch beliebige Objekte einfügen:
var sprite1 = ct.attachMovie("sprite", "sprite1", 1);
var sprite2 = ct.attachMovie("sprite", "sprite2", 2);

var buttons = this.createEmptyMovieClip("buttons", 3);
// Alles, was in "buttons" instanziert wird, liegt über allen anderen Objekten:
var but1 = buttons.attachMovie("button", "but1", 1);
var but2 = buttons.attachMovie("button", "but2", 2);

Gruß
.
 
Danke für deine Hilfe, hab das jetzt auf die schnelle versucht, das klappt ja auch, bis ich das nicht in meinen "unübersichtlichen" code einfüge, dannach läuft nichts mehr. Ich hänge mich heute noch mal rein. Hab da auch eine andere möglichkeit gefunden. Aber da hatte ich auch noch ein Problem, ich hab die Schaltflächen alle in ein symbol gepackt und versucht damit meinen code im Frame Drei anzusprechen.
PHP:
	on(release){
_root.rotateleft(myMap);
_root.szpruefen();
}

Und dabei hat es nicht ganz funktioniert da die Funktion einen MC vor oder zurück spullt, jetzt wird der MC nur endlos abgespielt. Wird die Schaltfläche nicht mit Actionscript eingebunden und liegt bereits an ihrenm Platz, dan funktioniert alles normal.
 
Zurück