• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-03-2010, 15:01   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2010
Beiträge: 22
Auslesen der Breite eines Sprites

Hi,

ich bastele an einer Bilderleiste herum, welche auch mit Testwerten soweit ganz gut funktioniert.

Ich hänge bloß an einer Stelle: Für den Endlosloop der Leiste benötige ich die Breite des Sprites in dem die Bilder geladen werden. Diese muss ich dynamisch auslesen und weiterverarbeiten, da sie mit der Breite der Bilder variieren kann.
Problem ist; dass ich die Breite erst ab einer bestimmten Position im Ablauf korrekt auslesen kann und sie vorher immer 0 ist, obwohl der Sprite gefüllt ist und korrekt in der DisplayList hängt .
Die Breite wird mir erst korrekt angegeben, wenn ich sie in einer Unterfunktion auslese die über eine MouseEvent ausgelöst wird.

Hat jemand einen Tip für mich, wie ich die Größe des Sprite bereits nach der Instanzierung oder dem Hinzufügen zur DisplayList auslesen kann??

Danke schonmal...

Mein Codeausschnitt der Dokumentenklasse (hier noch mit einer statischen Breitenangabe von 900px):

PHP-Code:
package
{
    
import flash.display.*;
    
import flash.text.TextField;
    
import flash.events.*;
    
import con_slide;
    
import btn_slideleft;
    
import btn_slideright;
    
    public class 
slideshow extends MovieClip
    
{
        
// Variablen
        // ____________________________________________________________________________________________________________________________
        
public var slidecon1:con_slide;                // Bildcontainer1
        
public var slidecon2:con_slide;                // Bildcontainer2
        
public var buehne:* = this;
        public var 
mouse_xpos:int;                    // Variable für x-Werte der Mausposition
        
public var step:Number 0;                    //
        
public var pan_breite:Number 900;             // Breites eines/des (Slide-)Containers
        
public var breite:Number 755;             // Breites der Bühne
        
public var speed:Number = -15;                 // Geschwindigkeit und Richtung
        
public var initspeed:Boolean true;        // Schalter für Initialgeschwindigkeit
        //public var getconwidth:Number;
        
        // Dokumentenfunktion (class constructor)
        // ____________________________________________________________________________________________________________________________
        
public function slideshow():void
        
{    
        
            
slidecon1 = new con_slide();
            
slidecon2 = new con_slide();
            
slidecon2.slidecon1.pan_breite;        // Anfangsausrichtung der beiden Container -> nebeneinander
            
buehne.addChild(slidecon1);
            
buehne.addChild(slidecon2);
            
trace(slidecon2.width);   //HIER WIRD MIR IMMER 0 AUSGEGEBEN
            
            
buehne.addEventListener(MouseEvent.MOUSE_OVERinit);    // EventListener + Fkt. für Start der mausabhängigen Geschwindigkeit
            
function init(event:MouseEvent):void
            
{
                
initspeed false;
                
//getconwidth = slidecon2.width;
                
trace(slidecon2.width); //HIER WIRD MIR KORREKT 900 AUSGEGEBEN
                
removeEventListener(MouseEvent.MOUSE_OVERinit);
            }
            
            
buehne.addEventListener(Event.ENTER_FRAMEslidenow);
            
        } 
Adlerhorst ist offline   Mit Zitat antworten
Alt 14-03-2010, 15:33   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Check mal über einen Timer, wann die width zur Verfügung steht.
  Mit Zitat antworten
Alt 14-03-2010, 15:59   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2010
Beiträge: 22
Ähm...wie macht man das am besten?? Mein AS3 Wissen reicht dafür leider noch nicht.
Adlerhorst ist offline   Mit Zitat antworten
Alt 14-03-2010, 16:17   #4 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
Musst nicht per Timer checken, sondern nur einen Event.ADDED Listener anlegen und darauf dann reagieren.

ActionScript:
  1. slidecon2.addEventListener( Event.ADDED, onAddedWhatEver );
  2. function onAddedWhatEver( event:Event ):void{
  3. trace( slidecon2.width );
  4. }

Geändert von [RK] (14-03-2010 um 16:19 Uhr)
[RK] ist offline   Mit Zitat antworten
Alt 14-03-2010, 16:28   #5 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
@RK: leider funzt der Event.ADDED oft nicht bzw. nicht "rechtzeitig". Der Timer ist hier zum Testen effektiver.
PHP-Code:
timer = new Timer(40);
timer.start();
timer.addEventListener(TimerEvent.TIMERtimerHandler);
...
private function 
timerHandler(e:TimerEvent):void
{
   if(
slidecon2.width && slidecon2.height 0)
   {
      
trace("timer beendet");
      
timer.stop();
      
timer.removeEventListener(TimerEvent.TIMERtimerHandler);
      
trace("slidecon2.width="+slidecon2.width);
   }

  Mit Zitat antworten
Alt 15-03-2010, 09:36   #6 (permalink)
Neuer User
 
Registriert seit: Feb 2010
Beiträge: 22
Also das mit dem Timer hat super geklappt...Danke

Aber warum ist das überhaupt nötig bzw. warum steht die Breite nicht sofort nach der Instanzierung zur Verfügung??

Würde mir helfen die Funtktionsweise besser zu verstehen und ähnliche Fehler nicht nochmal zu machen...

vg,

phillip
Adlerhorst ist offline   Mit Zitat antworten
Alt 15-03-2010, 12:48   #7 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
IMHO schafft es der Player oft nicht, auf ein und demselben Frame etwas aus der Bibliothek zu kopieren und gleichzeitig zu rendern. Das Problem tauchte auch schon unter AS1/2 mit attachMovie auf...
  Mit Zitat antworten
Alt 15-03-2010, 13:39   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 11.856
Ich habe gerade mal einen Test gemacht. Quadrat gezeichnet (50px * 50px), MovieClip gemacht, Export...
Code:
var s:Symbol = new Symbol();
trace(s.width, s.height); // 50, 50
Hätte mich auch gewundert wenn es nicht so wäre. In welchen Szenarios ist es denn nicht so? Symbole werden meines Wissens nach stumpf gebaut - da kann nichts verloren gehen.

Wenn natürlich die anfangs Container leer sind, was ich bei einem Container erwarten würde, ist das Verhalten korrekt.

@Holger, was meinst du mit oft? Mir ist das Verhalten noch nie aufgefallen.
Omega Psi ist offline   Mit Zitat antworten
Alt 15-03-2010, 16:53   #9 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
@Holger, was meinst du mit oft? Mir ist das Verhalten noch nie aufgefallen.
Medien aller Art, besonders Bitmaps und MCs mit Grafiken aus der Bibliothek. Ein Quadrat zeichnen und rendern ist in Flash etwas anderes, als etwas aus der Bibliothek nachzuladen...

In Flex fällt das deshalb eher weniger auf, ist aber bei Nachladen mit der Image- oder SWFLoader-Komponente ähnlich. Ein addedToStage kommt viel zu früh, da ist der Container fast immer noch ohne Größe...
  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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Breite eines JPGs schon beim laden auslesen? piXeLfanatiker ActionScript 1 3 14-02-2005 12:28
Breite eines MovieClips auslesen und neu berrechnen? Stomper Flash MX 2004 1 05-02-2005 14:26
Wie kann ich kontinuierlich die Breite eines MC auslesen? IVbaCK ActionScript 1 16 01-10-2003 15:45
breite eines eingeladenen mc's auslesen ???? grossy ActionScript 1 15 07-09-2003 13:23
breite eines textfeldes auslesen? - vars innerhalb komponenten andilab Komponenten und SmartClips 3 04-08-2002 11:14


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele