我正在尝试关注Hemanth Sharma的Starling视频教程。我已经按照他在第二个视频(linked here)上输入的代码输入了代码,但是我很难得到相同的结果。
首先,当我的代码与夏尔马先生相匹配并出现时:
var bitmap:Bitmap = new Assets[name]();
gameTextures[name] = Texture.fromBitmap( bitmap );
我使用此代码收到错误。错误表明我试图从非对象中实例化一个类。
我通过将其分解为步骤来跟踪代码过程。现在我的代码显示为:
trace( "Building for", name );
var classObj : Class = Assets[name];
trace( "Class", classObj );
var bitmap : Bitmap = new classObj() as Bitmap;
trace( "Bitmap", bitmap );
trace( "Assign value" );
Assets["gameTextures"][name] = Texture.fromBitmap( bitmap );
trace("Value assigned" );
使用此代码,我能够看到我与Sharma先生的代码出错的原因是Sharma先生使用classObj
访问的Assets[name]
初始化为{{1 }}
先生。 Sharma没有构造函数来设置静态变量的值,因此我假设Embed元标记与此字段的值赋值有关。
我将从该文件中复制我的代码并将其粘贴到下面。
有没有人知道我在哪里犯错?
任何人都可以解释一下Embed元标记是如何工作的,这样我就可以找到比现在更多技能的错误吗?
Assets.as:
null
答案 0 :(得分:1)
您也可以尝试..立即诊断错误。
public static function getTexture(name:String):Texture
{
if (!Assets.gameTextures[name])
{
try
{
var aClass:Class = Assets[name];
var aRaster:Bitmap = new aClass();
Assets.gameTextures[name] = Texture.fromBitmap(aRaster);
}
catch (fail:Error)
{
throw "There's no texture <" + name + "> in Assets.";
}
}
return Assets.gameTextures[name];
}
答案 1 :(得分:0)
我目前正在开发一款游戏并拥有与您类似的设置,这是我成功使用的代码:
EmbeddedAssets.as(在名为utils的文件夹中):
package utils
{
import starling.textures.Texture;
public class EmbeddedAssets
{
[Embed(source = "./../assets/icons/stats.png")]
private static const stats:Class;
public static const statsButtonTexture:Texture = Texture.fromEmbeddedAsset(stats);
Embed(source = "./../assets/icons/stats_down.png")]
private static const stats_down:Class;
public static const statsButtonDownTexture:Texture = Texture.fromEmbeddedAsset(stats_down);
}
}
然后,在我的代码中的其他地方,我使用这些引用如下:
private function setStatsButtonStyles(button:Button):void
{
var defaultICon:ImageLoader = new ImageLoader();
defaultIcon.source = EmbeddedAssets.statsButtonTexture;
defaultIcon.width = 60;
defaultIcon.height = 60;
var downIcon:ImageLoader = new ImageLoader();
downIcon.source = EmbeddedAssets.statsButtonDownTexture;
downIcon.width = 60;
downIcon.height = 60;
button.defaultIcon = defaultIcon;
button.downIcon = downIcon;
button.width = button.height = 60;
}
请注意,我使用的是Feathers UI按钮,而不是Starling按钮(Feathers按钮具有更多功能,但想法是相同的)。