Flashhilfe.de - Flash Community

MovieClip in Klasse neu positionieren [Flash 10]

 


AntwortenRegistrieren Seite1  

avi.Selch#1
Benutzerbild von avi.Selch
Beiträge: 29
Wohnort: Europa
Registriert: Oct 2009

02.10.2012, 20:51

meine fla
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*    Problembeschreibung
*    
*   Wenn die Gruppe von Balken den rechten oder linken Stage-Rand erreicht, soll der Balken,
*   welcher sich über den Rand hinaus bewegt wieder die Gruppe innen ergänzen.
*   Das funktioniert auch sehr gut auf der rechten Seite (wenn man die Stage links hovert).
*   Auf der rechten Seite sind die nach innen gesprungenen Balken jedoch schneller.
*   Sie halten nicht den, mit der Variable "gap" definierten Abstand von 20.
*      -> Dateien als ZIP angehängt <-
*/


import Bar;
var gap:int = 20;

//-- mehrere Instanzen der Bar Klasse aufrufen
var bar_00:Bar = new Bar(stage,-gap);
var bar_01:Bar = new Bar(stage,0);
var bar_02:Bar = new Bar(stage,gap*1);
var bar_03:Bar = new Bar(stage,gap*2);
var bar_04:Bar = new Bar(stage,gap*3);
var bar_05:Bar = new Bar(stage,gap*4)
var bar_06:Bar = new Bar(stage,gap*5);
var bar_07:Bar = new Bar(stage,gap*6);
var bar_08:Bar = new Bar(stage,gap*7);
var bar_09:Bar = new Bar(stage,gap*8);
var bar_10:Bar = new Bar(stage,gap*9);
var bar_11:Bar = new Bar(stage,gap*10);



meine Klasse
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package
{
     import flash.events.Event;
     import flash.display.Sprite;
     import flash.display.MovieClip;
 
     public class Bar extends Sprite
     {
        //-- Variablen für Balken Movieclip
      private var barHeight:int = 550;
        private var barWidth:int = 10;
        private var barColor = 0xFFFFFF;
        private var balken:MovieClip = new MovieClip();
        private var gap:int = 20;
        
        public function Bar(stage, margin):void {
           
           //-- Balken erzeugen
         balken.graphics.beginFill(barColor);
           balken.graphics.drawRect(margin, 0, barWidth, barHeight);
           balken.graphics.endFill();
           balken.y = 0;
           stage.addChild(balken);
           
           addEventListener(Event.ENTER_FRAME, enterFrameFunction);
           function enterFrameFunction(event:Event):void {
              
              //-- Balken bewegen
            var offset:Number = 0.5 - (mouseX / stage.stageWidth);
              offset *= 12.0;
              balken.x += offset;
              
              //-- Balken umpositionieren
            if(balken.x + margin + gap <= 0){
                 balken.x += gap*12;
              }else if(balken.x + margin >= 1100){
                 balken.x -= gap*10;
              }
           }
        }
     }
}
"Die Frage ist, wie ist die Antwort?"
Werbung
Beiträge: 0
Registriert: Feb 2016


vindel#2
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

03.10.2012, 12:23

Hallo,

du machst die Randerkennung ja nicht einheitlich..
balken.x + margin + gap <= 0 -> Hier ist gap 20, margin meist deutlich drüber, also muss balken.x weit ins negative gehen damit der Balken zurück kommt.
balken.x + margin >= 1100 -> Um die gleiche Logik wie oben zu haben, müsstest du margin und gap abziehen, wenn 1100 deine Bildschirmgröße ist und dann stimmt es!
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
avi.Selch#3
Benutzerbild von avi.Selch
Beiträge: 29
Wohnort: Europa
Registriert: Oct 2009

Themenautor/in

03.10.2012, 12:41

Das von mir beschriebene Problem hat nix mit der Randerkennung zu tun. Die stimmt so.
Es geht darum das sich die aus "offset" resultierende animations Geschwindigkeit bei dem zurück geholten Balken verändert obwohl sie eigentlich global berechnet wird.
Du müsstest den Code schon testen um zu sehen wovon ich spreche. ;)
"Die Frage ist, wie ist die Antwort?"
vindel#4
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

04.10.2012, 12:59

Dann wärs nett wenn du mal deine FLA-Datei postest!
Was mir noch aufgefallen ist:
Du gibst jedem Balken die Position plus dein Offset *12 - und danach schaust du ob es umpositioniert werden muss. Wenns link ist, addierst du den Abstand * 12 noch mal drauf - ergo hast du deinen balken um offset*24 verschoben. Auf der anderen Seite nur um 2...
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
Werbung
Beiträge: 0
Registriert: Feb 2016


avi.Selch#5
Benutzerbild von avi.Selch
Beiträge: 29
Wohnort: Europa
Registriert: Oct 2009

Themenautor/in

05.10.2012, 14:41

Hallo Vindel,
schon mal danke für deine Antwort.
Das Geschwindigkeitsproblem ist jetzt gelöst. Schon beim erzeugen des MC's und beim Füllen wurde balken.x falsch definiert.
Jedoch gibt es durch die vielen Nachkommastellen noch ein Problem mit den Abständen der versetzten MC's. Wenn der offset zu klein wird (langsam scrollen) dann vergrößert sich der Abstand beim umpositionieren der Balken. Ich gebe der Klasse noch mal einen String mit damit man die X Positionen tracen kann.

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package
{
     import flash.events.Event;
     import flash.display.Sprite;
     import flash.display.MovieClip;
 
     public class Bar extends Sprite
     {
        //-- Variablen für Balken Movieclip
      private var barHeight:int = 550;
        private var barWidth:int = 20;
        private var barColor = 0xFFFFFF;
        private var balken:MovieClip = new MovieClip();
        private var gap:int = 40;
        
        public function Bar(stage, margin, String):void {
           
           //-- Balken erzeugen
         balken.graphics.beginFill(barColor);
           balken.graphics.drawRect(0, 0, barWidth, barHeight);
           balken.graphics.endFill();
           balken.x = margin;
           balken.y = 0;
           stage.addChild(balken);
           
           addEventListener(Event.ENTER_FRAME, enterFrameFunction);
           function enterFrameFunction(event:Event):void {
              
              //-- Balken bewegen
            var offset:Number = 0.5 - (mouseX / stage.stageWidth);
              offset *= 60.0;
              balken.x += offset;
              
              //-- X Positionen ausgeben
            if (String=="ident_0"){
                 trace(balken.x);
                 }
              if (String=="ident_1"){
                 trace(balken.x);
                 }
              
              //-- Balken umpositionieren
            if(balken.x + gap <= 0){
                 balken.x += gap*29;
              }else if(balken.x >= 1100){
                 balken.x -= gap*29;
              }
           }
        }
     }
}
"Die Frage ist, wie ist die Antwort?"

Angehängte Dateien:
Komprimierte Datei Bar.zip10.67 KB
vindel#6
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

06.10.2012, 11:15

Es würde schon reichen, wenn du den Wert rundest - halbe Pixel Pixel kann dein Bildschirm eh nicht richtig darstellen:
ActionScript:
1balken.x += Math.round(offset);

Ich weiß ja nicht was du damit vor hast, aber wies momentan aussieht würde ich mir das Muster ein mal Zeichen und dann doppelt auf die Bühne ziehen - so hast du nur 2 MC was je nach Anwendung performanter ist..
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
avi.Selch#7
Benutzerbild von avi.Selch
Beiträge: 29
Wohnort: Europa
Registriert: Oct 2009

Themenautor/in

07.10.2012, 10:43

Danke für die Antwort!
ActionScript:
1balken.x += Math.round(offset);
hatte ich schon getestet. Dabei war das Problem das die Animation "kantig" wird - gerade bei sehr langsamen Tempo. Auch das Runden auf 2 oder 3 Nachkommastellen war nicht erfolgreich, denn dabei kommt es wieder zu Verschiebungen.
Das Muster in großen MC's zu zeichnen und zwei mal auf die Bühne zu ziehen wäre eine Möglichkeit, die mich aber in meinen weiteren Möglichkeiten einschränken würde.
Nun habe ich folgenden Ansatz:
Die einzelnen MC's haben jetzt einen String mitbekommen. Mit dem kann ich die genaue X Position feststellen. Das heißt ich müsste auch ständig überprüfen können ob der Abstand von 40 eingehalten wird. Nur weiß ich nicht wie ich die Kommunikation zwischen den verschiedenen Instanzen organisieren könnte.
"Die Frage ist, wie ist die Antwort?"

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de