私はHemanth SharmaのStarlingビデオチュートリアルに従おうとしています。私は彼の2番目のビデオ(linked here)で行ったようにコードを入力しましたが、私は同じ結果を得るのが難しいです。私のコードは、氏シャルマさんをマッチとして登場したときにまずこのEmbed&Textureでコードが作成されないのは何ですか?
は、:
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");
、私は氏シャルマのコードでエラーが出る理由は、氏シャルマはAssets[name]
を使用してアクセスしclassObj
は、null
に初期化していることであることを確認することができています。
Mr. Sharmaには静的変数の値を設定するコンストラクタがありません。したがって、埋め込みメタタグはこのフィールドへの値の割り当てと関係があると仮定します。
私のコードをそのファイルからコピーして下に貼り付けます。
どこにエラーがありますか?
どのように埋め込みメタタグが機能するので、私は今までより多くのスキルでエラーを見つけることができますか?
Assets.as:
package
{
import flash.display.Bitmap;
import flash.utils.Dictionary;
import starling.textures.Texture;
public class Assets
{
[Embed(source="../media/graphics/bgWelcome.jpg")]
public static const BgWelcome:Class;
[Embed(source="../media/graphics/welcome_hero.png")]
public static const WelcomeHero:Class;
[Embed(source="../media/graphics/welcome_title.png")]
public static const WelcomeTitle:Class;
[Embed(source="../media/graphics/welcome_playButton.png")]
public static const WelcomePlayButton:Class;
[Embed(source="../media/graphics/welcome_aboutButton.png")]
public static const WelcomeAboutButton:Class;
private static var gameTextures:Dictionary = new Dictionary();
public static function getTexture(name: String): Texture
{
if(Assets.gameTextures[name] == undefined){
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");
}
return Assets.gameTextures[name];
}
}
}
アセット[name]というコードでは、「BgWelcome」や「WelcomeHero」などの名前の値のみが有効です。 Assets.getTexture(...)は、Assets.gemeTextures辞書が初期化されていても塗りつぶされていないため、明らかに失敗します。 – Organis
それは良い点です。トレース出力を追加して、エラーの原因となっている文字列を確認する必要があります。私は使用されている文字列が "BgWelcome"だと信じています。 –
@Organis、あなたはクレジットポイントを与えることができるように答えとしてあなたのコメントを追加してください。 BgWelcomeは疑わしいと呼ばれていますが、トレースをさらに詳しく見ると、実際には "WelcomePlayBtn"というエラーが発生します。これは "WelcomePlayButton"にする必要があります。 –