Не получается получить доступ к свойству объекта Kinetic.Image
Не могу вывести свойство объекта класса, в одном из методов этого класса.
function Snake () {
var snakeImg = new Image();
snakeImg.src = "Snake.png";
snakeImg.onload = function () {
this.snake = new Kinetic.Image ({
x:40,
y:40,
image:snakeImg
})
var snakeLayer = new Kinetic.Layer;
snakeLayer.add (this.snake);
stage.add (snakeLayer);
}
}
Snake.prototype.move_derection = function () {
console.log("ne pish" +this.snake.x);
}
Не узнает оно this.snake в методе. Вместо вывода x координаты, пишет что this.snake не определен. |
Конечно. this.snake у тебя добавляется асинхронно, при загрузке Image.
|
Так, а как исправить?
|
Концептуально. Сменив подход. Я б вообще отнаследовал Snake от Kinetic.Image. Но это крайности.
|
Существенная проблема в том, что ты пытаешься одновременно конструировать новый объект, скармливать ему ресурсы и проверять их загрузку.
|
Что-то типо:
window.onload = init;
//...
//описание всяких переменных
//...
function init () {
stage = new Kinetic.Stage ({
container: "container",
height: HEIGHT,
width: WIDTH
});
snakeImg = new Image();
snakeImg.src = "Snake.png";
//инициализация начнется только после загрузки картинки.
snakeImg.onload = function () {
snakeObj = new Snake ();
snakeObj.move_derection ();
}
};
И прежний код с классом Змейки. Вроде, что б улучшить, можно сделать так: в начале создавать функцию, которая будет инициализировать все картинки что есть, а уж после их загрузки, вызывать другую функцию с инициализацией всяких переменных, объектов и т.д. Удобоваримо? |
| Часовой пояс GMT +3, время: 08:20. |