1
  • コンストラクター関数があります
  • そこにbutton.X=20などのプロパティを書き、それらは機能します
  • しかし、同じクラスに別の関数を作成し、button.X=PosX などのプロパティを使用しましたが、機能しません。

エラーは次のとおりです。

1120: Access of undefined property button.var posX:Number = (stage.stageWidth / 2) - (button.width / 2);
1120: Access of undefined property button.posY:Number = (stage.stageHeight / 2) - (button.height / 2);
1120: Access of undefined property button.button.x = posX;
1120: Access of undefined property button.button.y = posY;

この Document クラスのコードは次のとおりです。

package
{
   import flash.text.TextField;
   import flash.display.Sprite;
   import flash.display.BitmapData;
   import flash.display.Bitmap;
   import flash.display.SimpleButton;
   import flash.display.MovieClip;
   import flash.events.Event;
   import flash.events.MouseEvent;
   import flash.display.DisplayObject;
   import flash.events.Event;
   import flash.display.StageScaleMode;
   import flash.display.StageAlign;

   public class main extends MovieClip
    {
function main()
{
    stage.addEventListener(Event.RESIZE, resizeHandler);
    stage.dispatchEvent(new Event(Event.RESIZE));
    stage.scaleMode = StageScaleMode.NO_SCALE;
    stage.align = StageAlign.TOP_LEFT;

    var button:graphic = new graphic();
    addChild(button);
    var field:type = new type();
    addChild(field);
}
function resizeHandler(event:Event):void
{
    var posX:Number = (stage.stageWidth / 2) - (button.width / 2);
    var posY:Number = (stage.stageHeight / 2) - (button.height / 2);

    button.x = posX;
    button.y = posY;
}
    }
}

私はプログラミングが初めてなので、エラーとは何か、解決策は何か、そしてそのような多くの機能を持つのは正しいことをもう少し説明してください。

4

2 に答える 2

0

問題は変数のスコープです。button

関数内で変数を宣言するため、mainその関数のスコープ内でのみ認識されます。このresizeHandler関数は、'button' という名前の変数について何も知りません。

変数を両方の関数で使用できるようにするには、そのスコープをmainクラス全体で認識されるように変更します。変数宣言をmain関数の外に移動するだけです (ただし、クラス内にはまだ含まれています)。

于 2013-09-21T20:10:55.147 に答える
0

問題はbutton内部のローカル変数でmainあり、 では使用できませんresize。ボタンをクラスフィールドに変更するか、resizeボタンを閉じるように変更する必要があります。

クラス フィールドを使用するには (推奨):

public class main extends MovieClip
{
    private var _button:Graphic;

    function main()
    {
        stage.addEventListener(Event.RESIZE, resizeHandler);
        stage.dispatchEvent(new Event(Event.RESIZE));
        stage.scaleMode = StageScaleMode.NO_SCALE;
        stage.align = StageAlign.TOP_LEFT;

        _button= new graphic();
        addChild(_button);
        var field:type = new type();
        addChild(field);
    }
    function resizeHandler(event:Event):void
    {
        var posX:Number = (stage.stageWidth / 2) - (_button.width / 2);
        var posY:Number = (stage.stageHeight / 2) - (_button.height / 2);

        _button.x = posX;
        _button.y = posY;
    }
}

ボタンを閉じるには:

public class main extends MovieClip
{

    function main()
    {
        stage.addEventListener(Event.RESIZE, resizeHandler);
        stage.dispatchEvent(new Event(Event.RESIZE));
        stage.scaleMode = StageScaleMode.NO_SCALE;
        stage.align = StageAlign.TOP_LEFT;

        var button:graphic = new graphic();
        addChild(button);
        var field:type = new type();
        addChild(field);

        function resizeHandler(event:Event):void
        {
            var posX:Number = (stage.stageWidth / 2) - (button.width / 2);
            var posY:Number = (stage.stageHeight / 2) - (button.height / 2);

            button.x = posX;
            button.y = posY;
        }

    }

}    
于 2013-09-21T20:07:48.570 に答える