Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как перемещать объекты в canvas? (https://javascript.ru/forum/misc/49376-kak-peremeshhat-obekty-v-canvas.html)

Dimaz 10.08.2014 20:01

Как перемещать объекты в canvas?
 
Помогите разобраться с перемещением квадрата. Чтобы он не растягивался, а перемещался.
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var x = 10;
var y = 10;
function draw(){
ctx.fillStyle = "green";
ctx.fillRect(x,y,15,15);
x++;
window.requestAnimationFrame(draw);
}
draw();

http://jsfiddle.net/g0Lmfygu/

Sweet 10.08.2014 20:25

.clearRect()

Safort 10.08.2014 21:15

Dimaz,
нужно очищать канвас(или его часть) перед каждым перемещением объекта.

<canvas id="myCanvas" width="400" height="400"></canvas>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var x = 10;
var y = 10;
function draw(){
    ctx.clearRect(0,0, 400, 400);
    ctx.fillStyle = "green";
    ctx.fillRect(x,y,15,15);
    x++;
    window.requestAnimationFrame(draw);
}
draw();
</script>



//однажды я задал подобный вопрос на этом форуме, а какой-то гнидос меня протроллил так и не ответив(

Sweet 10.08.2014 21:20

Цитата:

Сообщение от Safort
однажды я задал подобный вопрос на этом форуме

А под каким ником?:)

Safort 10.08.2014 21:34

Sweet, ответил в лс.

Dimaz 11.08.2014 18:10

Цитата:

Сообщение от Safort (Сообщение 325235)
Dimaz,
нужно очищать канвас(или его часть) перед каждым перемещением объекта.

<canvas id="myCanvas" width="400" height="400"></canvas>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var x = 10;
var y = 10;
function draw(){
    ctx.clearRect(0,0, 400, 400);
    ctx.fillStyle = "green";
    ctx.fillRect(x,y,15,15);
    x++;
    window.requestAnimationFrame(draw);
}
draw();
</script>



//однажды я задал подобный вопрос на этом форуме, а какой-то гнидос меня протроллил так и не ответив(

Так ведь если весь канвас очищать, надо будет все объекты заново рисовать. Это ж какая нагрузка будет) Химичил, химичил, вот что нахимичил:
function draw(){
ctx.fillStyle = "green";
ctx.fillRect(x,y,15,15);
ctx.clearRect(x-1,y,1,15);//очищаем
x++;
window.requestAnimationFrame(draw);
}

ixth 11.08.2014 19:54

Ты не поверишь, но обычно все так и делается. Иногда делается несколько слоев-канвасов, если очень уж не хочется что-то перерисовывать. Не надо преждевременной оптимизации, добейся первых тормозов, а потом ищи узкие места, а то запутаешься там, где до готового результата будет как до Китая.

Safort 11.08.2014 21:09

Dimaz,
Цитата:

Так ведь если весь канвас очищать, надо будет все объекты заново рисовать. Это ж какая нагрузка будет) Химичил, химичил, вот что нахимичил
Ну я же специально написал "нужно очищать канвас(или его часть)".
А вот допустим у тебя такая ситуация: на твоём холсте over 9000 всяких объектов и они постоянно куда-то движутся. Что тогда сделаешь?

Ну и как сказал товарищ выше - сначала добейся тормозов и только потом оптимизируй.

Mips 09.10.2015 00:12

А вот здесь
http://threejs.org/examples/#canvas_geometry_hierarchy
или здесь
http://threejs.org/examples/#canvas_lines
тоже каждый раз полностью очищается канвас и каждый элемент рисуется заново?


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