2012-03-30 5 views
0

Ich habe meine eigene Schaltfläche, die einfach von Sprite erweitert. Es kann 3 verschiedene Text ein- und ausblenden mit einem Timer. In meiner Zeichenfunktion zeichne ich zuerst ein Rechteck mit dem Sprites-Grafikobjekt, das den Hintergrund der Schaltfläche darstellt.AS3 zieht größer Sprite als ich gesetzt habe (Padding/Marge?)

Ich habe eine Funktion hinzugefügt, um die Breite der Schaltfläche festzulegen. Diese Eigenschaft wird zum Zeichnen des Rechtecks ​​verwendet. Ich weiß, dass die Größe der Sprites nach der Rechteckzeichnung aktualisiert wird. Aber aus irgendeinem Grund ist die Breite des Sprites immer größer als die, die ich über meine "setButtonWidth" -Funktion eingestellt habe.

Jetzt habe ich ein einfaches Sprite, das als ein Knopf fungiert, der einen graphics.drawRectangle Teil hat, der ein einfaches rect zeichnet. mit sagen wir 500 px Breite. Aber wenn ich die Breite dieses Knopfes aufspüre, ist es immer ungefähr 10% mehr. Woher kommen diese 10%?

Ich las über den Aufruf von validateNow(). Dies gilt jedoch nur für Labels oder Checkboxen. Aus irgendeinem Grund kann ich nicht auf die Bibliothek für Label zugreifen. Dies muss irgendwie mit TextFields funktionieren. Aber wie?

// this function is part of MyButtonClass.as file 
function drawButton() 
{ 
    this.graphics.clear(); 
    this.graphics.beginFill(currentBackColor); 
    this.graphics.drawRoundRect(0, 0, int(this.buttonWidth)+20, 30, 10, 10); 
    this.graphics.endFill(); 
} 

// this code is in main action code frame 
// the buttonWidth is set this way 
stage.addEventListener(Event.RESIZE, updateBtn); 
function updateBtn(event:Event) 
{ 
    // access the container in which the buttons are in like ... 
    for(var i = 0; i < buttonContainer.numChildren; i++) { 
    var btn = buttonContainer.getChildAt(i) as MyButtonClass; 
    // MyButtonClass is the class which extends from Sprite drawing my button 
    // and using buttonWidth to draw the backgrounds width. 
    btn.setButtonWidth((stage.stageWidth/2) - 20); 
    // i set half of stageWidth because i have two columns with a list of buttons 
    // after setButtonWidth is called in MyButtonClass, the draw function is called 
    // which does the graphics stuff above. 
    } 
} 

this.buttonWidth ist auf 500. Es gibt nichts besonderes an diesem Sprite getan ist. Keine Kinder hinzugefügt werden, nur dieses Zeichen Zeug. Aber das setzt die Breite des Sprites auf 550 oder so.

+0

Sie sicher sind, dass die Schaltfläche Breite tatsächlich 500px breit ist und Sie nicht die Breite des Rahmens/Text fehlt Felder/niedriger Alpha-Gehalt? – Marty

+0

Vorsicht, wie 'this.buttonWidth' eingestellt ist? All dieser Code ist, dass die Breite aus einer Variablen namens "ButtonWidth" + 20 Pixel berechnet wird, bezweifle ich, dass dies die Probleme verursacht, die Sie haben. – Daniel

+0

Wie ist 'buttonWidth' eingestellt? Was ist der Typ von 'buttonWidth' und was nutzt typecasting mit' int'? – Diode

Antwort

0

definieren Button wie diese

package { 

    import flash.display.Sprite; 

    public class Button extends Sprite { 

     private var _buttonWith: int = 0; 
     private var _buttonHeight: int = 0; 

     public function Button() { 
      // constructor code 
     } 

     public function set buttonWidth(w: int): void { 
      _buttonWith = w; 
      updateButton(); 
     } 

     public function get buttonWidth(): int { 
      return _buttonWith; 
     } 

     public function set buttonHeight(h: int): void { 
      _buttonHeight = h; 
      updateButton(); 
     } 

     public function get buttonHeight(): int { 
      return _buttonHeight; 
     } 

     protected function updateButton() { 
      graphics.clear(); 
      graphics.beginFill(0xff00ff); 
      graphics.drawRoundRect(0, 0, buttonWidth, buttonHeight, 10, 10); 
      graphics.endFill(); 
     } 
    } 
} 

Und erstellen Beispiel wie dieses

var button:Button = new Button(); 
addChild(button); 

button.buttonWidth = 100; 
button.buttonHeight = 30; 
+0

Das ist genau das, was meine Button-Klasse macht. Außer der Höheneinstellung verwende ich nur eine statische Höhe, die kein Problem sein sollte. Aber die Tastenbreite nach dem Aufruf von setButtonWidth ist mehr als das, was ich eingestellt habe. Ich habe sowohl den buttonWidth-Parameter als auch den width-Parameter der Schaltfläche selbst ermittelt, die vom Sprite-Objekt stammt. Die Breite ist immer größer als die von mir eingestellte buttonWidth. – NovumCoder