10.08.2014, 20:01
|
Профессор
|
|
Регистрация: 25.12.2009
Сообщений: 222
|
|
Как перемещать объекты в 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/
|
|
10.08.2014, 20:25
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
|
|
10.08.2014, 21:15
|
|
Профессор
|
|
Регистрация: 23.12.2013
Сообщений: 1,856
|
|
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>
//однажды я задал подобный вопрос на этом форуме, а какой-то гнидос меня протроллил так и не ответив(
|
|
10.08.2014, 21:20
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Сообщение от Safort
|
однажды я задал подобный вопрос на этом форуме
|
А под каким ником?
|
|
10.08.2014, 21:34
|
|
Профессор
|
|
Регистрация: 23.12.2013
Сообщений: 1,856
|
|
Sweet, ответил в лс.
|
|
11.08.2014, 18:10
|
Профессор
|
|
Регистрация: 25.12.2009
Сообщений: 222
|
|
Сообщение от Safort
|
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);
}
|
|
11.08.2014, 19:54
|
|
Профессор
|
|
Регистрация: 19.01.2010
Сообщений: 354
|
|
Ты не поверишь, но обычно все так и делается. Иногда делается несколько слоев-канвасов, если очень уж не хочется что-то перерисовывать. Не надо преждевременной оптимизации, добейся первых тормозов, а потом ищи узкие места, а то запутаешься там, где до готового результата будет как до Китая.
|
|
11.08.2014, 21:09
|
|
Профессор
|
|
Регистрация: 23.12.2013
Сообщений: 1,856
|
|
Dimaz,
Цитата:
|
Так ведь если весь канвас очищать, надо будет все объекты заново рисовать. Это ж какая нагрузка будет) Химичил, химичил, вот что нахимичил
|
Ну я же специально написал "нужно очищать канвас (или его часть)".
А вот допустим у тебя такая ситуация: на твоём холсте over 9000 всяких объектов и они постоянно куда-то движутся. Что тогда сделаешь?
Ну и как сказал товарищ выше - сначала добейся тормозов и только потом оптимизируй.
|
|
|
|