@durnevdanya

Как обновлять позицию изображений на Canvas?

Всем привет. Написал функцию для назначения позиций изображений на канвасе.

App.js (игра)
my_Doge = game.addSprite("Doge", "mydoggy", 0, 700, 100, 100);


При добавлении объекта он записывается в массив this.addedSprites
Library.js
this.addedSprites.push(spriteObj);

Я также написал способ изменения позиции для него
game.setPos(my_Doge, my_Doge.xcoord+=2, my_Doge.ycoord);


После изменения позиции в библиотеке происходит метод render
GameWindow.prototype.setPos = function(sprite, newX, newY)
{ // Set new sprite position
	sprite.xcoord = newX;
	sprite.ycoord = newY;

	for(var i = 0; i < this.addedSprites.length; i++)
	{
		if(sprite.id == this.addedSprites[i].id)
		{
			this.addedSprites[i].xcoord = newX;
			this.addedSprites[i].ycoord = newY;
		}
	}

	this.render(sprite, sprite.width, sprite.height, sprite.xcoord, sprite.ycoord);
}

GameWindow.prototype.render = function(sprite, width, height, x, y)
{
	ctx = this.ctx;

    canvas.width=canvas.width;

    ctx.drawImage(sprite, x, y, width, height);

}


Вот, что происходит:
ezgif_com-video-to-gif.gif?extra=boes9cG

Если удалить метод
game.setPos(my_Doge, my_Doge.xcoord+=2, my_Doge.ycoord);
(чтоб пес не двигался), то можно увидеть. что я до этого добавил кошку, но она исчезает, а обновляется только пес.
x8IPRw7d0UQ.jpg

Окей, я попробовал следующую штуку - чтобы все объекты из массива добавленных объектов this.addedSprites путем цикла также рисовались на холст
gameWindow.prototype.render = function(sprite, width, height, x, y)
{
	ctx = this.ctx;

    canvas.width=canvas.width;

    for(var i = 0; i < this.addedSprites.length; i++)
    {
    	var w = new Image();
    	w.src = this.addedSprites[i].src;
    	ctx.drawImage(w, this.addedSprites[i].x,this.addedSprites[i].y,this.addedSprites[i].width,this.addedSprites[i].height);
    }

    ctx.drawImage(sprite, x, y, width, height);

}

но получилось не очень:
ezgif_com-video-to-gif_1.gif?extra=8LLe3
В чем проблема? Я не понимаю, как сделать, чтобы появлялись только прочие объекты, а не главный герой, который уже двигается? Может быть проблема в методе render?

Большое спасибо

P.S
Если прописать движение для двух объектов, а не только для одного
game.setPos(my_Doge, my_Doge.xcoord+=2, my_Doge.ycoord);
	game.setPos(my_Cat, my_Cat.xcoord+=2, my_Cat.ycoord);

То будет двигаться только тот, который прописан последний
  • Вопрос задан
  • 385 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы