【问题标题】:AS3 Dynamically reference embedded graphics?AS3 动态引用嵌入式图形?
【发布时间】:2023-03-27 22:41:01
【问题描述】:

首先,我在 AS3 上不太喜欢,所以如果这是一个糟糕的问题,我很抱歉。我已经搜索过,但找不到这个确切问题的直接参考/解决方案。

我的问题: 我正在尝试将所有相关图形嵌入到一个类(“Assets.as”)中,该类将有一个静态方法来按名称检索这些嵌入的图形。

我的尝试:

资产.as

package
{
    [...imports...]

    public class Assets
    {       
        [Embed(source="assets/images/l_peak.png")]
        public static const l_peak:Class;

        public static function getByName(pName:String):Bitmap
        {
            var retClass:Class = flash.utils.getDefinitionByName(pName) as Class;
            return new Bitmap(new retClass());  
        }
    }
}

然而,这会返回一个空对象。无论如何,getDefinitionByName() 要么返回 null,要么说没有一个名为那个的对象(即“l_peak”)。

我知道您可以使用 loader() 来动态处理图形,但我希望嵌入这些图形并简单地通过它们的名称动态获取它们。

任何帮助将不胜感激!

【问题讨论】:

  • 不要认为你需要位图转换。尝试返回这个[pName];

标签: actionscript-3 graphics loading


【解决方案1】:

你为什么不试试:

return Assets[pName];

【讨论】:

  • 谢谢!这就是我一直在寻找的……出于某种原因,我找不到对它的引用,或者我忽略了我所做的。
【解决方案2】:

我认为该属性必须是公共 var 而不是 const 但我可能是错的。 作为测试尝试只是 public var

[Embed(source="assets/images/l_peak.png")]
public var l_peak:Class;

此外,本文可能会帮助您: http://www.bit-101.com/blog/?p=853

如果您仍有问题,则可能是您的资产路径存在问题。来自live docs

指定要嵌入的资产的名称和路径;绝对路径或相对于包含 embed 语句的文件的路径。嵌入资产必须是本地存储的资产。因此,您不能为要嵌入的资产指定 URL。 有关设置路径的更多信息,请参阅关于设置嵌入资产的路径。

【讨论】:

  • 仍然说“l_peak”没有定义?奇数。
  • 检查以确保您的资产路径正确。我相信路径是相对于您正在编辑的 AS 文件的位置。我已编辑我的答案以包含此选项
  • 路径很好,如果我愿意,我可以通过 (new l_peak()) 来初始化它。
  • 如果你执行 trace(getQualifiedClassName(new l_peak())),输出是什么?无论追踪到什么,您都应该将字符串传递给 getDefinitionByName()
  • Eduardo 的解决方案更符合我的要求,但我会 +1,因为您的解决方案也可以。
猜你喜欢
  • 2015-06-16
  • 2018-09-21
  • 2011-01-31
  • 1970-01-01
  • 2014-06-14
  • 2012-01-08
  • 2018-01-21
  • 2014-09-06
  • 2010-11-07
相关资源
最近更新 更多