1

私はクラスでとても新しいです。以下は、幅、高さ、xy、および背景色を設定できる StageObject クラスを作成する試みです。

 package 
    {
        import flash.display.MovieClip;



public class StageObjects extends MovieClip
    {


        public function StageObjects()
        {
            // constructor code
        }
        public function setUpStageObject(w:int, h:int, X:int, Y:int, color:Number):void
        {
            this.width = w;
            this.height = h;
            this.x = X;
            this.y = Y;

            this.cacheAsBitmap = true;
            this.graphics.beginFill(color,1);
            this.graphics.drawRect(0,0,w,h);
            this.graphics.endFill();
            this.opaqueBackground = color;
            trace("parameters: " + w + " - " + h + " - " + X + " - " + Y + " - " + color);


        }

        /*~~~ adjust position and scale functions ~~~*/
        public function adjustXY(ch:Object, par:Object):void
        {
            var w = par.width;
            var h = par.height;

            ch.x = par.x + (w - ch.width) / 2;
            ch.y = par.y + (h - ch.height) / 2;
        }

        public function adjustWH(ch:Object, par:Object):void
        {
            var w = par.width;
            var h = par.height;

        }

    }

}

メイン タイムライン (Flash) では、次のようにします。

var titleBkg:StageObjects = new StageObjects();
titleBkg.setUpStageObject(imageBoxWidth, titleBkgHeight, -1, imageBoxHeight +1, 0x589199);
this.addChild(titleBkg);

しかし、それは現れません。「これ」を参照しましたか。違う?

4

2 に答える 2

1

addChild でグラフィックを適切に作成およびペアレント化していません。

事実上、ステージは次のようになります。

Stage ¬
    0: MainTimeline:MovieClip ¬
        0: instance1:StageObjects

そして、次のようにする必要があります。

Stage ¬
    0: MainTimeline:MovieClip ¬
        0: instance1:StageObjects ¬
            0: instance1:Shape

グラフィック呼び出しは、ムービークリップではなく、シェイプで呼び出す必要があります。2 回線ではなく 1 回線を使用して、最初の通話でこの設定を行うこともできます。

package {
    import flash.display.MovieClip;

    public class StageObjects extends MovieClip {
        public function StageObjects(w:int, h:int, X:int, Y:int, color:uint) {
            // Constructor
            this.x = X;
            this.y = Y;

            var rect:Shape = new Shape();
            rect.graphics.beginFill(color,1);
            rect.graphics.drawRect(0,0,w,h);
            rect.graphics.endFill();
            addChild(rect);
            trace("parameters: " + w + " - " + h + " - " + X + " - " + Y + " - " + color);
        }


        public function adjustXY(ch:Object, par:Object):void {
            // adjust position and scale functions
            var w = par.width;
            var h = par.height;

            ch.x = par.x + (w - ch.width) / 2;
            ch.y = par.y + (h - ch.height) / 2;
        }

        public function adjustWH(ch:Object, par:Object):void {
            var w = par.width;
            var h = par.height;
        }
    }
}

オブジェクトの作成は次のように単純化されます。

var titleBkg:StageObjects = new StageObjects(imageBoxWidth, titleBkgHeight, -1, imageBoxHeight +1, 0x589199);
this.addChild(titleBkg);
于 2013-03-28T15:54:15.267 に答える
-1

コンストラクターで幅、高さ、グラフィックスなどを宣言したと思います。私のクラス コードでは、'this.' を使用したことはありません。変数がクラスのプライベート/パブリックとして宣言されている場合、コンパイラは同じ名前で別の変数を宣言することを許可しません。したがって、'this.' を使用する必要はありませんが、'this.' を使用するとより読みやすくなります。(クラス変数であることがわかります)。
グラフィックをステージに追加しましたか (titleBkg ではなく、titleBkg オブジェクト内に作成したオブジェクト)? ;)

于 2013-03-28T14:59:49.323 に答える