[MX] Isometrie: Steuerungsproblem

Comander_Keen

Erfahrenes Mitglied
Abend zusammen,

ich versuche mich gerade (mehr oder weniger) an dem thema isometrie in flash mx. Meine quellen dazu sind eigentlich nur die "pocket page - tips und tricks für multimediadesigner" ausgabe.

hier gibts erstmal die .fla bzw. die .swf

Wie ihr sehen könnt will ich die graue fläche in zwei räume unterteilen. Es gibt 4 arten von linien (welche alle mc sind).. linie0, linie1, linie2 und linie3. Jede dieser linien ist einer seiten(art) in diesen zwei räumen zugewiesen.

und da isn screenshot von dem ganzen salat:

screenshot.gif


mein problem: - ich kann mich als "user" nicht nach unten bewegen
- es gelten jeweils nur die "root"-linien, und nicht ihre nachträglich eingefügten "klone".



Code:
// diese Funktion wird unsere Linien initialisieren

initLinie = function(mc){
	
	//erstellt einen neuen leeren MovieClip im linie MovieClip
	mc.createEmptyMovieClip("empty",1);
	mc.empty._x = 100; 
	mc.empty._y = 100;
	
	// errechnet die Koordinaten des empty MovieClips, relativ zur Hauptzeitleiste
	mc.punkt = new Object();
	mc.punkt.x = mc.empty._x;
	mc.punkt.y = mc.empty._y;
	mc.localToGlobal(mc.punkt);

	// m, die Steigung der Linie wird errechnet
	mc.m=(mc.punkt.y-mc._y)/(mc.punkt.x-mc._x);
	
	// b, der y-Achsenabschnitt wird errechnet
	mc.b=mc._y-mc.m*mc._x;
};

// diese Funktion testet ob sich mc über oder unter der linie befindet.

below = function(linie,mc){
	mc.yLinie = mc._x*linie.m+linie.b;
	if(mc._y >= mc.yLinie){
		return true;
	}else{
		return false;	
	}
};

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// die Anzahl der Linien wird festgelegt und diese werden in einen Array geschrieben

anzahlLinien = 12;

linien = new Array();

for(i=0;i<anzahlLinien;i++){
	linien[i] = this["linie"+i];
}

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Initialisierung der linie MovieClips
for(i=0;i<linien.length;i++){
	initLinie(linien[i]);
}

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Geschwindigkeit der Box
player.speed = 6;

// Der Text im zweiten Bild soll am Anfang noch nicht angezeigt werden
player.stop();

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Wir testen ob sich der Ball innerhalb der Fläche befindet
// und erlauben Bewegungen nur dann, wenn sich die Box noch
// innerhalb befindet

this.onEnterFrame = function(){
	
	// wir testen mit Hilfe der Geradengleichung,
	// ob sich die Box unter der Linien oder über ihnen befindet 
    if(Key.isDown(Key.LEFT) && !below(linie0,_root.player)){
		player._x-=player.speed;
		player._y+=player.speed/2;
	}
	if(Key.isDown(Key.UP) && below(linie1,_root.player)){
		player._x-=player.speed;
		player._y-=player.speed/2;
	}
	if(Key.isDown(Key.RIGHT) && below(linie2,_root.player)){
		player._x+=player.speed;
		player._y-=player.speed/2;
	}
	if(Key.isDown(Key.DOWN) && !below(linie3,_root.player)){
		player._x+=player.speed;
		player._y+=player.speed/2;
	}

};


stop();

sicherlich sind dies ganz einfache (fatale) fehler .. bitte helft sie mir zu beseitigen!

greetz 3k!
 
Zuletzt bearbeitet:
Hi,

nettes Script.
Code:
// File created by Danny Franzreb
// for Flash MX und ActionScript Professionell

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// diese Funktion wird unsere Linien initialisieren

initLinie = function(mc){
	
	//erstellt einen neuen leeren MovieClip im linie MovieClip
	mc.createEmptyMovieClip("empty",1);
	mc.empty._x = 100; 
	mc.empty._y = 100;
	
	// errechnet die Koordinaten des empty MovieClips, relativ zur Hauptzeitleiste
	mc.punkt = new Object();
	mc.punkt.x = mc.empty._x;
	mc.punkt.y = mc.empty._y;
	mc.localToGlobal(mc.punkt);

	// m, die Steigung der Linie wird errechnet
	mc.m=(mc.punkt.y-mc._y)/(mc.punkt.x-mc._x);
	
	// b, der y-Achsenabschnitt wird errechnet
	mc.b=mc._y-mc.m*mc._x;
};

// diese Funktion testet ob sich mc über oder unter der linie befindet.

below = function(linie,mc){
	mc.yLinie = mc._x*linie.m+linie.b;
	if(mc._y >= mc.yLinie){
		return true;
	}else{
		return false;	
	}
};

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// die Anzahl der Linien wird festgelegt und diese werden in einen Array geschrieben

anzahlLinien = 12;

linien = new Array();

for(i=0;i<anzahlLinien;i++){
	linien[i] = this["linie"+i];
}

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Initialisierung der linie MovieClips
for(i=0;i<linien.length;i++){
	initLinie(linien[i]);
}

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Geschwindigkeit der Box
player.speed = 6;

// Der Text im zweiten Bild soll am Anfang noch nicht angezeigt werden
player.stop();

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Wir testen ob sich der Ball innerhalb der Fläche befindet
// und erlauben Bewegungen nur dann, wenn sich die Box noch
// innerhalb befindet

this.onEnterFrame = function(){
	
	// wir testen mit Hilfe der Geradengleichung,
	// ob sich die Box unter der Linien oder über ihnen befindet 
    if(Key.isDown(Key.LEFT) && !below(linie0,_root.player)){
		player._x-=player.speed;
		player._y+=player.speed/2;
	}
	if(Key.isDown(Key.UP) && below(linie1,_root.player)){
		player._x-=player.speed;
		player._y-=player.speed/2;
	}
	if(Key.isDown(Key.RIGHT) && below(linie2,_root.player)){
		player._x+=player.speed;
		player._y-=player.speed/2;
	}
	if(Key.isDown(Key.DOWN) && below(linie3,_root.player)){
		player._x+=player.speed;
		player._y+=player.speed/2;
	}

	
	// hier wird in den zweiten Frame des box-MovieClips geprungen
	// dadurch wird die Textbox angezeigt
	if(!below(linie4,_root.player)
	&& below(linie5,_root.player)
	&& below(linie6,_root.player)
	&& !below(linie7,_root.player)){
		player.gotoAndStop(2);
	}else{
		player.gotoAndStop(1);
	}

};


stop();
 
Zuletzt bearbeitet:
Genau das ist das script aus der "pocket page" ...

das mit dem ! wurde mir in flashhilfe.de schon gezeigt, aber trotzdem danke!

Nun raff ich aber noch nicht wie ich die anderen linien (begrenzungen) festlegen kann. Muss ich für jede linie einen einzelnen mc erstellen? Oder klappt das nach meiner dankweise auch irgendwie... also allen linien gleichen "art" den selben bezeichner zuweisen.

greetz 3k!
 

Neue Beiträge

Zurück