2012-03-30 5 views
0

私はSpriteから単純に拡張した独自のボタンを作成しました。 タイマーを使用して3つの異なるテキストをフェードインまたはフェードインすることができます。 私の描画機能では、最初にボタンの背景を表すSpriteグラフィックスオブジェクトで四角形を描画します。AS3は私が設定したより大きなスプライトを描画します(パディング/マージン?)

ボタン幅を設定する機能を追加しました。このプロパティは、矩形を描画するために使用されます。私はスプライトのサイズが四角形描画の後に更新されることを知っています。しかし何らかの理由で、スプライトの幅は常に私の "setButtonWidth"関数で設定したものよりも大きくなります。

私はシンプルな矩形を描画するgraphics.drawRectangleの部分を持つボタンとして動作する単純なスプライトを持っています。 500pxの幅と言うことができます。しかし、そのボタンの幅をトレースすると、常に約10%増えます。これらの10%はどこから来たのですか?

私はvalidateNow()を呼び出すことについて読んだ。しかし、これはラベル、またはチェックボックスの場合のみです。何らかの理由で私はラベルのライブラリにアクセスすることができません。これは何とかTextFieldで動作する必要があります。しかしどうですか?

// 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は500に設定されています。そのスプライトには特別な処理はありません。追加される子供はいません。この絵のものだけです。しかし、これはスプライトの幅を550などに設定します。

+0

は、あなたがボタンの幅が実際500pxなど多種であることを特定していて、境界線/テキストの幅が不足していないようにインスタンスを作成しますフィールド/低アルファコンテンツ? – Marty

+0

'this.buttonWidth'の設定方法を気にする必要はありませんか?このコードはすべて、幅が 'buttonWidth' + 20ピクセルという変数から計算されているので、これが原因で問題が発生しているとは思えません。 – Daniel

+0

'buttonWidth'はどのように設定されていますか? 'buttonWidth'の型は何ですか?' int'を使った型キャストの使い方は何ですか? – Diode

答えて

0

Button

このような
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(); 
     } 
    } 
} 

を定義し、この

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

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

これは私のボタンクラスがやっていることです。高さの設定を除いて、私はちょうど問題ではない静的な高さを使用します。しかし、まだsetButtonWidthを呼び出した後のボタンの幅は、私が設定したものより多いです。私は、buttonWidthパラメータとスプライトオブジェクトから来るボタン自体の幅パラメータの両方をトレースしました。幅は常に私が設定したbuttonWidthよりも大きいです。 – NovumCoder

関連する問題