0

私はまだオブジェクト指向プログラミングについて学んでいます...

水平ボタンリストを作成するために、独自の単純なボタンクラスを作成しました。私はうまくいきますが...

package as3Classes {

import flash.display.Graphics;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.Event;
import flash.text.TextField;
import flash.events.MouseEvent;
import fl.motion.MotionEvent;
import flash.text.TextFormat;

public class simpleButton extends MovieClip {

    //var nome:String = new String();
    var sub:Sprite = new Sprite();
    public var realce:Sprite = new Sprite();
    public var titulo:String;

    public function simpleButton(nomeId:String, texto:String) {
        this.name = nomeId;
        this.titulo = texto;
        this.useHandCursor = true;
        this.buttonMode = true;
        this.mouseChildren = false;
        var txtf:TextFormat = new TextFormat();
        txtf.font = "Arial";
        var txt:TextField = new TextField();
        txt.wordWrap = false;
        txt.multiline = false;
        txt.text = texto;
        txt.setTextFormat(txtf);
        txt.width = txt.textWidth+4;
        txt.height = 22;
        txt.x = 4;
        txt.y = 2;
        txt.cacheAsBitmap = true;
        var fundo:Sprite = new Sprite();
        fundo.graphics.beginFill(0xCCCCCC);
        fundo.graphics.drawRect(0, 0, txt.width+8, 22);
        fundo.graphics.endFill();
        //var realce:Sprite = new Sprite();
        this.realce.graphics.beginFill(0x00CC00);
        this.realce.graphics.drawRect(0, 0, txt.width+8, 22);
        this.realce.graphics.endFill();
        this.sub.graphics.beginFill(0xFF0000);
        this.sub.graphics.drawRect(0, 0, txt.width+8, 2);
        this.sub.graphics.endFill();
        this.addChild(fundo);
        this.addChild(this.realce);
        this.addChild(this.sub);
        this.addChild(txt);
        this.sub.alpha = 0;
        this.sub.y = 22;
        this.addEventListener(MouseEvent.MOUSE_OVER, mouseover);
        this.addEventListener(MouseEvent.MOUSE_OUT, mouseout);
    }

    private function mouseover(e:MouseEvent){
        sub.alpha = 1;
    }
    private function mouseout(e:MouseEvent){
        sub.alpha = 0;
    }

}

}

...「titulo」にアクセスしようとしたり、「realce」をalpha = 1に設定したりすると(クリックして表示するため)、undefinedが返されます。名前、アルファなど、継承されたプロパティのみを設定または読み取ることができます。私の概念上の誤りは何ですか?

4

1 に答える 1

0

はい!この問題を回避する方法を見つけました: (縫い目として) オブジェクト リストを表示して「simpleButton」の内部パブリック オブジェクトにアクセスできないため、メイン クラスのルートにプライベート オブジェクト (btns:Object) を作成します。 (どこでも見ることができます) 表示に追加すると同時に、simpleButtons を追加します。名前は同じなので、realce.alpha を btns で変更すると表示に反映されます。

e.target がオブジェクト自体ではなく子につながるため、これは奇妙です!

誰かがより良い方法を知っているなら、私に知らせてください。

于 2012-10-19T18:52:28.050 に答える