【问题标题】:AS3 Starling Framework Texture Atlas TypeError #1007AS3 Starling Framework Texture Atlas TypeError #1007
【发布时间】:2012-07-22 06:24:46
【问题描述】:

我是 Starling 框架的新手,目前正在学习如何使用它。

我已经使用 starling 框架从嵌入的 PNG 文件创建了纹理,这些纹理可以完美地工作并显示在屏幕上,但我正在尝试让 spritesheet (Texture Atlas) 工作,它给了我这个:

“错误 #1007:在非构造函数上尝试实例化。”

根据我所做的所有研究,我的代码应该可以工作。

这是我的 Assets 类中的适用代码。

public class Assets
{
    [Embed(source="assets/sky.png")]
    private static var SKY_CLASS:Class;
    public static var SKY:Texture;

    [embed(source="assets/generalsheet.png")]
    private static var GENERAL_SHEET_CLASS:Class;       
    [embed(source="assets/generalsheet.xml", mimeType="application/octet-stream")]
    private static var GENERAL_ATLAS_CLASS:Class;
    public static var GENERAL_SHEET:TextureAtlas;

    public static function init():void
    {
        SKY = Texture.fromBitmap(new SKY_CLASS());
        GENERAL_SHEET = new TextureAtlas(Texture.fromBitmap(new GENERAL_SHEET_CLASS()), XML(new GENERAL_ATLAS_CLASS())); // this is where Flash Builder tells me there is an error
    }

【问题讨论】:

    标签: actionscript-3 error-handling sprite-sheet starling-framework


    【解决方案1】:

    你只需要把Embed标签写成大写,改一下:

    [embed(source="assets/generalsheet.png")]
    private static var GENERAL_SHEET_CLASS:Class;       
    [embed(source="assets/generalsheet.xml", mimeType="application/octet-stream")]
    private static var GENERAL_ATLAS_CLASS:Class;
    

    到:

    [Embed(source="assets/generalsheet.png")]
    private static var GENERAL_SHEET_CLASS:Class;       
    [Embed(source="assets/generalsheet.xml", mimeType="application/octet-stream")]
    private static var GENERAL_ATLAS_CLASS:Class;
    

    附带说明,类名通常用 UpperCamelCase 编写,而 ALL_CAPITALIZED 保留用于常量。变量名通常以 lowerCamelCaselowercase_separated_by_underscore 书写。这是大多数 ActionScript3(和 Java)程序员都遵循的约定,如果您坚持下去,您的代码将更具可读性,因此下次应该更容易为您提供帮助;)

    所以我推荐:

    [Embed(source="assets/sky.png")]
    private static var SkyClass:Class;
    
    public static var sky:Texture;
    
    [Embed(source="assets/generalsheet.png")]
    private static var GeneralSheetClass:Class;
    
    [Embed(source="assets/generalsheet.xml", mimeType="application/octet-stream")]
    private static var GeneralAtlasClass:Class;
    
    public static var general_sheet;
    
    public static function init():void
    {
        sky = Texture.fromBitmap(new SkyClass());
    
        general_sheet = new TextureAtlas(Texture.fromBitmap(new GeneralSheetClass()), XML(new GeneralAtlasClass()));
    }
    

    【讨论】:

    • 谢谢!那是一个菜鸟的错误。在 Flash Builder 中发现这一点非常棘手,大写的 Embed 和小写的颜色相同,并且不会引发任何编译时错误。再次感谢,我开始感到沮丧。
    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 2012-12-03
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多