Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.08.2014, 01:09
Интересующийся
Отправить личное сообщение для Straj Посмотреть профиль Найти все сообщения от Straj
 
Регистрация: 05.08.2014
Сообщений: 16

Не получается получить доступ к свойству объекта 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 не определен.
Ответить с цитированием
  #2 (permalink)  
Старый 07.08.2014, 02:05
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Конечно. this.snake у тебя добавляется асинхронно, при загрузке Image.
Ответить с цитированием
  #3 (permalink)  
Старый 07.08.2014, 10:37
Интересующийся
Отправить личное сообщение для Straj Посмотреть профиль Найти все сообщения от Straj
 
Регистрация: 05.08.2014
Сообщений: 16

Так, а как исправить?
Ответить с цитированием
  #4 (permalink)  
Старый 07.08.2014, 10:53
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Концептуально. Сменив подход. Я б вообще отнаследовал Snake от Kinetic.Image. Но это крайности.
Ответить с цитированием
  #5 (permalink)  
Старый 07.08.2014, 10:54
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Существенная проблема в том, что ты пытаешься одновременно конструировать новый объект, скармливать ему ресурсы и проверять их загрузку.
Ответить с цитированием
  #6 (permalink)  
Старый 07.08.2014, 12:44
Интересующийся
Отправить личное сообщение для Straj Посмотреть профиль Найти все сообщения от Straj
 
Регистрация: 05.08.2014
Сообщений: 16

Что-то типо:
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 ();
}
};


И прежний код с классом Змейки.

Вроде, что б улучшить, можно сделать так: в начале создавать функцию, которая будет инициализировать все картинки что есть, а уж после их загрузки, вызывать другую функцию с инициализацией всяких переменных, объектов и т.д.

Удобоваримо?

Последний раз редактировалось Straj, 07.08.2014 в 13:51.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить доступ к элементу объекта по "динамической цепочке" kaf Общие вопросы Javascript 4 15.09.2012 10:06
Доступ к свойству объекта. Dimentr Общие вопросы Javascript 2 26.12.2011 16:23
Как в jQuery получить доступ к фрейму или самому верхнему окну? Neokortex jQuery 7 20.12.2010 10:38
Как получить список пользовательских функций объекта window? Маэстро Events/DOM/Window 13 03.07.2010 13:20
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00