【问题标题】:How to use SWF height for class variable in actionscript3?如何在 actionscript3 中为类变量使用 SWF 高度?
【发布时间】:2011-09-18 00:34:47
【问题描述】:

我想将 [SWF height=200] 中的高度用于类变量。

我尝试了以下代码,但它导致编译错误。

const SWF_HEIGHT:int = 200;

package {
    import flash.display.*;

    [SWF(backgroundColor=0xffffff, width=400, height=SWF_HEIGHT)]

    public class Main extends Sprite {
        public static const Y:int = SWF_HEIGHT / 2;
    }
}

如果我使用数字 200 而不是 const SWF_HEIGHT, 不会发生编译错误。
但我不想在 2 个地方写相同的数字。

有没有办法避免在 2 个地方写相同的数字?

【问题讨论】:

    标签: actionscript-3 actionscript flash height class-variables


    【解决方案1】:

    -- 答案已编辑--

    你需要反过来做:

    package {
        import flash.display.*;
    
        [SWF(backgroundColor=0xffffff, width=400, height=200)]
    
        public class Main extends Sprite {
            private static var _swfHeight : int = -1;
            public static function get swfHeight():int{
                return _swfHeight;
            }
            public function Main():void{
                _loader = this.loaderInfo;
                _loader.addEventListener(Event.COMPLETE, loaded );
            }
            private var _loader : LoaderInfo;
            private function loaded( event : Event ) : void{
                _swfHeight = _loader.height;
            }
        }
    }
    

    【讨论】:

    • 这不是一个很可靠的方法。 stageHeight 不会总是给你在 SWF 元标记中指定的高度。如果有屏幕外的精灵,或者形状的笔触稍微在屏幕外,它可能会更大。
    • 这不是真的。你说的是stage.height,而不是stage.stageHeight。但是,您是正确的,因为这不是正确的方法。我刚刚测试了不同的可能性,但使用 noScale StageScaleMode 失败
    • 我编辑了正确的答案。我知道我在某个地方做过,所以我查了一下。这应该是唯一真正可靠的解决方案。
    • @Creynders 感谢您的回答!使用 noScale StageScaleMode 时是否编辑了代码以获取舞台高度?如果我使用 showAll(default mode) 而不是 noScale,我可以使用之前版本的代码吗?
    • 是的,它应该适用于所有舞台缩放和对齐设置。舞台上或舞台外有或没有物体。但是,如果您碰巧发现它不起作用的情况(有很多可能的组合),请告诉我!
    【解决方案2】:

    为什么要在元标记中设置高度?您可以在构造函数中执行此操作:

    const SWF_HEIGHT:int = 200;
    
    package {
        import flash.display.*;
    
        [SWF(backgroundColor=0xffffff, width=400)]
    
        public class Main extends Sprite {
            public static const Y:int = SWF_HEIGHT / 2;
    
            public function Main():void {
                height = SWF_HEIGHT;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 2014-02-27
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多