Я пытаюсь следовать учебным видеороликам Starling от Hemanth Sharma. Я набрал код, как он сделал на своем втором видео (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");
Используя этот код, я могу видеть, что причина, я получаю сообщение об ошибке с кодом г Шарма является то, что classObj
, что г-н Шарма обращается с помощью Assets[name]
, инициализирует null
,
Mr. Sharma не имеет конструктора для установки значения статических переменных, поэтому я предполагаю, что метатег Embed имеет какое-то отношение к присвоению значения этому полю.
Я скопирую код из этого файла и вставив его ниже.
Кто-нибудь видит, где я делаю свою ошибку?
Может ли кто-нибудь объяснить, как работать с метатегами, чтобы я мог найти ошибку с большим количеством навыков, чем сейчас?
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];
}
}
}
С кодом Активы [имя] действительны только значения имен «BgWelcome» или «WelcomeHero» или так далее. Тогда Assets.getTexture (...), очевидно, завершится неудачно, потому что словарь Assets.gemeTextures инициализирован, но никогда не заполняется. – Organis
Это хороший момент. Я должен добавить вывод трассировки, чтобы вы могли видеть строку, вызывающую ошибку. Я считаю, что используемая строка - «BgWelcome». –
@Organis, можете ли вы добавить свой комментарий в качестве ответа, чтобы я мог дать вам кредитные баллы. BgWelcome вызывается, как я подозревал, но поскольку я смотрю дальше в трассировку, строка, вызывающая ошибку, фактически является «WelcomePlayBtn», которая должна быть «WelcomePlayButton». –