Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопросы по Canvas (https://javascript.ru/forum/misc/30560-voprosy-po-canvas.html)

daima 21.08.2012 11:40

Цитата:

Сообщение от DenBraun (Сообщение 199009)
если объекты должны взаимодействовать друг с другом то все рисуешь на одном холсте, можно написать класс который эмулирует слои рендеринга, то есть чтоб манипулировать уровнем отрисовки. В CSS полезно размещать все объекты которые не включены в игровую логику а просто я вляются интерьером игры или интерфейсом.
пример: bug-wars.com/bugwars.html
один canvas элемент

О, клевая ссыль. Надо будет попробовать распотрошить игрушку))

function player(x,y,sprite) {
this.x=x;
this.y=y;
var cache_canvas;
var move;

this.walk_left=function(){
	alert("a");

}

this.init= function(){
	

	document.onkeydown=function(e) {
	   if(e.keyCode==37) {this.walk_left; /*move=setInterval('this.walk_left',600);*/}

	}

	document.onkeyup=function(e) {
	   if(e.keyCode==37 || e.keyCode==38 || e.keyCode==39 || e.keyCode==40) this.clear();
	}


}


this.clear= function(){
	clearInterval(move);
}

this.init();
}

Добавляем игрока на холст: var hero=new player(160, 144,sprite);

Он появляется, но когда я жму на клавишу "стрелка влево",this.walk_left почему-то не запускается((

zebra 21.08.2012 12:57

Вечная проблема с this. Прочитайте

daima 21.08.2012 13:27

Цитата:

Сообщение от zebra (Сообщение 199310)
Вечная проблема с this.

Что-то слишком сложным для меня языком написано. Есть ли проще статья?

zebra 21.08.2012 13:49

Проще на примере.
this.init = function() {
     var self = this;
    document.onkeyup=function(e) {
     //this.init() -> this ссылается не на ваш класс, а на window.
    self.init(); // -> self ссылается на ваш класс
    };
};

daima 21.08.2012 14:30

Ураааааааааааааа!! Спасибо. Теперь работает. Но появился другой вопрос:
if(e.keyCode==37) {this.walk_left; /*move=setInterval('self.walk_left',600);*/}
почему-то когда держишь кнопку нажатой ф-я выполняется многократно

zebra 21.08.2012 14:38

Не держите кнопку зажатой :D

daima 21.08.2012 17:14

:lol: не, ну как. чел зажал кнопку - человек побежал. Но почему срабатывает не 1 раз, а пока кнопку держишь?

zebra 21.08.2012 20:11

Наверное флаг сделать. Если нажата кнопка flag = true, отжали flag = false


Часовой пояс GMT +3, время: 21:07.