Всем привет. Написал функцию для назначения позиций изображений на канвасе.
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);
}
Вот, что происходит:
Если удалить метод
game.setPos(my_Doge, my_Doge.xcoord+=2, my_Doge.ycoord);
(чтоб пес не двигался), то можно увидеть. что я до этого добавил кошку, но она исчезает, а обновляется только пес.
Окей, я попробовал следующую штуку - чтобы все объекты из массива добавленных объектов
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);
}
но получилось не очень:
В чем проблема? Я не понимаю, как сделать, чтобы появлялись только прочие объекты, а не главный герой, который уже двигается? Может быть проблема в методе 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);
То будет двигаться только тот, который прописан последний