Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не получается получить доступ к свойству объекта Kinetic.Image (https://javascript.ru/forum/misc/49310-ne-poluchaetsya-poluchit-dostup-k-svojjstvu-obekta-kinetic-image.html)

Straj 07.08.2014 01:09

Не получается получить доступ к свойству объекта 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 не определен.

ixth 07.08.2014 02:05

Конечно. this.snake у тебя добавляется асинхронно, при загрузке Image.

Straj 07.08.2014 10:37

Так, а как исправить?

ixth 07.08.2014 10:53

Концептуально. Сменив подход. Я б вообще отнаследовал Snake от Kinetic.Image. Но это крайности.

ixth 07.08.2014 10:54

Существенная проблема в том, что ты пытаешься одновременно конструировать новый объект, скармливать ему ресурсы и проверять их загрузку.

Straj 07.08.2014 12:44

Что-то типо:
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, время: 19:57.