2012-03-25 3 views
0
bgY += (enemySpeed + heroSpeed)/2; 
ctx.drawImage(bg, bgX, bgY - gameHeight); 
ctx.drawImage(bg, bgX, bgY); 
if(bgY > gameHeight) 
{ 
    bgY = 0; 
} 

Я использую приведенный выше код, чтобы нарисовать фон на моем холсте.CANVAS: SHMUP background drawing

Это хорошо работает, за исключением небольшого запаздывания при каждом новом изображении. Перед тем, как он нарисован, игрок может увидеть, как фон не имеет изображения на секунду вверху. (Это не моя основная проблема, но вы можете помочь с этим тоже)

В любом случае, теперь главная проблема:

я не уверен, но я думаю, что, когда изображения перемещаются ниже холста, они «на самом деле не удалено .. Разве это не замедлит игру вниз/даст плохую производительность через некоторое время?

Есть ли способ предотвратить это?

+0

Что вы подразумеваете под словом «изображения перемещаются под холстом» или «они фактически не удалены»? – Howard

+0

Первая строка кода «bgY + = (enemySpeed ​​+ heroSpeed)/2;» означает, что точка bgY перемещается вниз, а это означает, что при создании новых фоновых изображений они ниже, чем раньше. Когда точка идет ниже холста, я устанавливаю bgY равным 0, а это значит, что он снова начинает рисовать сверху. Но изображения, которые находятся ниже холста (те, что уже были нарисованы), являются афайками, все еще ниже холста, их просто невозможно увидеть. –

+0

А теперь я вижу. Рисование изображений оптимизировано (для любой разумной реализации холста), чтобы изображения были обрезаны относительно границ холста перед рисованием. Это оказывает незначительное влияние на производительность, но вы ничего не видите (и вряд ли даже измеряете). – Howard

ответ

0

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

bgY += (enemySpeed + heroSpeed)/2; 
bgY %= gameHeight; 
ctx.drawImage(bg, bgX, bgY - gameHeight); 
ctx.drawImage(bg, bgX, bgY); 
+0

Да, это помогает с временной прозрачностью. Благодарю. –