Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-08-2003, 17:48   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
swapDepths - Für Profis - ich kriegs nicht hin

ich habe eine Spielfigur die ich auf der Bühne nach vorne und
nach hinten bewegen kann. Nun möchte ich, das die Spielfigur
sich auch hinter Gegenständen bewegen kann bzw. das wenn
die figur von vorne auf den Gegenstand zuläuft nichts passiert.

Mein Problem ist das ich nicht weis wie ich die funktion schreiben
muss, damit die Movieclips die Vor der Spielfigur stehen richtig
stehen (nämlich hintereinander) und wie ich die tiefe jeweils
zuweise, da ja der Gegenstand den ich zuerst passiert habe
auch immer vorne stehen muss und die anderen dann ja jeweils
dahinter. Wenn ich mir immer die Eigenschaft von meiner Spielfigur
hole, dann habe ich nämlich nicht die richtige Anordnung meiner
Gegenstände da sich der zuletzt geswapte Gegenstand dann
in den Vordergrund stellt.

Mein Ansatz sieht so aus:
mc_vorne =[];
man= man.getDepth();
function checkDepts(){
myArray= [mc1, mc2,mc3,mc4,mc5,mc6]
for(i=0;i<myArray.length;i++){
if(man.swapCheck._y <= myArray[i]._y){
mc_vorne = myArray[i];
mc_vorne[i].swapDepths(weis nicht);
}
}
}

Ich checke ab bei welchem Gegenstand (myArray[i]) die
y-Koordinate von man höher liegt und speicher diese dann
in ein neues leeres Array (mc_vorne). Anschliessend hatte
ich vor dem neuen Array mc_vorne die neuen tiefen zuzuweisen.

Weis allerdings nicht ob das dann auch so klappt da das ganze
ja auch umgekehrt funktionieren soll. Desweiteren, weis ich nicht
wie ich ich den Rest hoch bzw. runterzählen soll.

Ich denke es gibt vielleicht noch eine einfachere Variante, bin
für jeden Tip dankbar.

P.S. hab mir die Beiträge zu swapDepths, iso-tiefe, etc. schon
angeschaut war aber nix spezielles für tiefentausch bei
z-Bewegung dabei.

Ist jetzt grad ein bissl viel aber vielleicht kann mir ja jemand helfen oder einen Ansatz geben.

Danke
__________________
Danke an alle Beteiligten ...
drive68 ist offline   Mit Zitat antworten
Alt 13-08-2003, 18:13   #2 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
nicht so kompliziert....
Du brauchst ja nach Deiner Erklärung keinen wirklichen Tiefentausch, Du musst Deiner Spielfigur nur eine eindeutige Tiefe geben, die keines der Objekte genau haben kann, also als erstes setzt Du die Tiefen der mc's und zwar in Zehnerschritten etwa so:
ActionScript:
  1. for(i=1;i>=6;i++){
  2. this["mc"+i].swapDepths(Math.floor(this["mc"+i]._y)*10+i);
  3. }
Jettz kannst Du Deiner Spielfigur genauso die Tiefe geben:
ActionScript:
  1. man.swapDepths(Math.floor(man._y)*10);
...uuund fertig.

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-

Geändert von Alois (13-08-2003 um 18:14 Uhr)
Alois ist offline   Mit Zitat antworten
Alt 13-08-2003, 18:31   #3 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
HI,

hmm, bewegen sich denn deine Gegenstände ebenfalls, oder stehen die nur in der Gegend rum?

Wenn sie nur stehen, verteile sie am besten auf levels mit Abständen von - sagen wir - 10 Ebenen. Diese Werte kannst du auch in einem Array speichern.
Wenn du dich in y-Richtung einem Objekt näherst, prüfst du ja, ob sich die Figur davor oder dahinter befinden soll. Wenn ja, hol dir die Tiefe des Objekts aus dem Array, zieh eins ab und weise diesen Wert der Figur zu.

Wenn sich mehrere Objekte gleichzeitig bewegen, könntest du wie folgt vorgehen:

Definiere je nach y-Wert einen Level-Bereich, also Bereich gleicher Tiefe. Du kannst es auch für jeden Pixel machen.

Sagen wir also, deine y-Werte reichen von 0 - 400 und du hast zehn Objekte, die auch gleichzeitig auf der gleichen Höhe sein können, dann benötigst du 4000 mögliche Level.

Jedes Objekt prüft onEnterFrame sein y und gibt sich ggf. einen neuen Level. Damit die Teile sich nicht gegenseitig kicken, benötigst du wieder ein Array, in dem der Level jedes Objekts gespeichert ist.

Ich hoffe, ich hab dich richtig verstanden (und du hast mich auch verstanden )

Grüße
Sascha
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 13-08-2003, 18:38   #4 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
@alois

ich möchte die Figur nach vorne und nach hinten bewegen, daher
benötige ich meiner Meinung eben schon eine Tiefenänderung
da die Gegenstände ja nach vorne scaliert werden und die
Figur nach hinten.
__________________
Danke an alle Beteiligten ...
drive68 ist offline   Mit Zitat antworten
Alt 13-08-2003, 19:17   #5 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Tiefenänderung: ja
Tiefentausch: nein
Mein script ist absolut nur Tiefenänderung und könnte natürlich auch in einem clipEvent stehen...

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 13-08-2003, 20:37   #6 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Ok, ich hab hier auf die Schnelle mal ein script erstellt, was wahrscheinlich genau das machct, was Du willst:
ActionScript:
  1. for(i=1;i<10;i++){
  2.     //erstmal mc's erstellen
  3.     ziel=this.createEmptyMovieClip("mc"+i,i);
  4.         ziel.i=i;
  5. with(ziel){
  6.     //was reinzeichnen, damit man was sieht
  7.     moveTo(-50,-25);
  8.     lineStyle(0);
  9.         beginFill(0x00ff00,100);
  10.         lineTo(50,-25);
  11.         lineTo(50,25);
  12.         lineTo(-50,25);
  13.         lineTo(-50,-25);
  14.         endFill();
  15.         _x=275;
  16.         _y=350;
  17.         }
  18. //jetzt liegen alle 9 mc's übereinander  
  19. //deshalb machen wir jetzt jeden mc dragable       
  20.     this["mc"+i].onPress=function(){
  21.                     startDrag(this,true,this._width/2,200-this.height/2,550-this.width/2,400-this.height/2);
  22.         }
  23. //Du willst so eine Art 3D-Effekt, das machst Du wahrsceinlich ähnlich wie in diesem enterFrame
  24.         this["mc"+i].onEnterFrame=function(){
  25.             this._xscale=50+(this._y-200)/4;
  26.             this._yscale=50+(this._y-200)/4;
  27. //...so und in diesem enterFrame kommt jetzt der swapDepts-Befehl
  28. //theoretisch reicht schon ein this.swapDepts(this._y); allerdings
  29. //kommt es dann bei gleicher Tiefe zweier mc's zu einem Blinkeffekt
  30.             this.swapDepths(Math.floor(this._y)*10+this.i);
  31.         }
  32. }
  33. _root.onMouseUp=function(){
  34.     stopDrag();
  35. }

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 13-08-2003, 21:38   #7 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
Danke Alois - Whooow!

Werd´s morgen gleich mal ausprobieren, hab nämlich schon
seit einer Stunde Stress mit meinere Frau weil zu lang vorm
Rechner -
__________________
Danke an alle Beteiligten ...
drive68 ist offline   Mit Zitat antworten
Alt 14-08-2003, 11:48   #8 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
Hallo Alois, war schon inetwa das was ich machen wollte, nur das ich eben nur die Figur mit meiner Tastatur bewegen wollte und der Rest wird nur in Abhängigkeit nach vorne oder nach hinten
bewegt / scaliert um einen Tiefeneffekt zu erzielen. Weis nicht
ob Du noch lust hast, da die Sache ja eigentlich mein Problem ist.
(Bin auch noch dran). Hab Dir trotzdem mal ein Beispiel angehängt damit Du siehst wie ich es mir vorgestellt habe.
Ist ne einfache Tweening-Ani, deshalb wechselt die Figur die Tiefe
nicht. Sollte am Ende eben so sein, das die Figur die Tiefe wechselt wie das DragObjekt in Deinem MC. Die Objekte sollen
nicht dragbar sein. Nur die Figur lässt sich über UP/Down steuern.

Vielen Dank
Angehängte Dateien
Dateityp: zip beispiel.zip (2,6 KB, 13x aufgerufen)
__________________
Danke an alle Beteiligten ...
drive68 ist offline   Mit Zitat antworten
Alt 14-08-2003, 14:11   #9 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
@alois
Hab´die Tiefen-Abfrage jetzt mal in eine Funktion gepackt und
den Wert des Movies "this["mc"+i] auf den festen Wert von
meinem MC man gelegt. Dennoch funktioniert es nicht ...

function checkDepths(){
myArray = [man,mc1,mc2,mc3,mc4, etc...];
man.onEnterFrame=function(){
man.swapDepths(Math.floor(myArray[i]._y)
*10+man.getDepth());
}
}

In myArray sind die MovieClips die vorhanden sind. Den MovieClips
in meinem Array werden am Anfang die Tiefen 100,99,98,97 etc... zugewiesen
__________________
Danke an alle Beteiligten ...

Geändert von drive68 (14-08-2003 um 14:19 Uhr)
drive68 ist offline   Mit Zitat antworten
Alt 14-08-2003, 15:05   #10 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
kann mir keiner weiterhelfen?
__________________
Danke an alle Beteiligten ...
drive68 ist offline   Mit Zitat antworten
Alt 14-08-2003, 16:52   #11 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
So - nun habe ich das Script fast so wie ich es brauche:

for(i=1;i<10;i++){
ziel = attachMovie ("mc","mc"+i,i);
myColor = new Color(mc1);
myColor.setRGB(0xff9933);
ziel.onEnterFrame=function(){
keyCheck();
this.swapDepths(Math.floor(this._y)*10+this.i);
}
}
function keyCheck(){
if (Key.isDown(Key.DOWN)){
mc1._y+= 1;
mc1._x = +10;
}
else if(Key.isDown(Key.UP)){
mc1._y-= 1;
}
}

Mein Problem ist nun, das ich in den Movie Ziel mehrere unterschiedliche MovieClips attachen will und die For-Schleife
Rausnehmen will. Ist das Möglich und funktioniert der Rest dann
auch noch so wie ich es will?
Angehängte Dateien
Dateityp: zip beispiel.zip (525 Bytes, 5x aufgerufen)
__________________
Danke an alle Beteiligten ...
drive68 ist offline   Mit Zitat antworten
Alt 15-08-2003, 18:45   #12 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
Bin immer noch nicht weiter - hat jemand noch einen Tip?
__________________
Danke an alle Beteiligten ...
drive68 ist offline   Mit Zitat antworten
Alt 16-08-2003, 01:09   #13 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Na jetzt weiss ich natürlich immer noch nicht was Du willst, deine geposteten swf's sind ja auch nicht grad Erleuchtung, die scripts die Du postest sind nicht sehr sauber (Du brauchst nicht zehnmal die Farbe von mc1 zu setzen und in allen zehn mc's den keyDown per enterFrame abragen ist ja performancebremse pur) wenn Du die Tiefe nur bei Tastendruck abfragen willst, bist Du natürlich mit listenern statt onEnterFrames besser bedient:
ActionScript:
  1. MovieClip.prototype.swapByY=function(){
  2.     this.swapDepths(Math.floor(this._y)*10+this.myIdent);
  3. }
  4. myAttachMovie=function(mcName){
  5.     if(!myAttachCount){
  6.         _global.myAttachCount=1;
  7.     }else{
  8.         myAttachCount++;
  9.     }
  10.     ziel = this.attachMovie( mcName, "mc"+myAttachCount, myAttachCount);
  11.     ziel.myIdent=myAttachCount;
  12.         ziel.swapByY();
  13. }
  14. myListener=new Object();
  15. myListener.onKeyDown = function() {
  16.     if (Key.isDown(Key.DOWN)){
  17.         mc1._y+= 1;
  18.         mc1._x += 10;
  19.     } else if(Key.isDown(Key.UP)){
  20.         mc1._y-= 1;
  21.     }
  22.     for(i=1;i<=myAttachCount;i++){
  23.         this["mc"+i].swapByY;
  24.     }
  25.    
  26.    
  27. };
  28. Key.addListener(myListener);
  29.  
  30. //Beispiel mc1 wird dann immer per Tastendruck bewegt
  31. myAttachMovie("logo");
  32. mc1._x=200;
  33. mc1._y=200;
  34. myAttachMovie("rees");
  35. mc2._x=200;
  36. mc2._y=400;

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-

Geändert von Alois (16-08-2003 um 01:13 Uhr)
Alois ist offline   Mit Zitat antworten
Alt 16-08-2003, 16:04   #14 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
Hab jetzt nochmal eine Demo-Fla angefertigt um das ganze ein
wenig plastischer zu machen. Ich hoffe das ich es jetzt richtig
erklärt habe. Vielen Dank für die Mühe.
__________________
Danke an alle Beteiligten ...
drive68 ist offline   Mit Zitat antworten
Alt 16-08-2003, 16:05   #15 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
Hab ganz vergessen das Demo anzuhängen...
Angehängte Dateien
Dateityp: zip demo.zip (7,8 KB, 10x aufgerufen)
__________________
Danke an alle Beteiligten ...
drive68 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele