23.04.2013, 23:02
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,583
|
|
Сообщение от Dim@
|
Aetae,
это логично, а если там змейка не в виде простых линий?
|
Пофигу. Главное чтоб фон отдельно рисовался.(что рекомендуют все уроки по canvas).
А дальше: в получившейся зоне есть непрозрачный пиксель? Значит false.)
__________________
29375, 35
|
|
23.04.2013, 23:13
|
Любитель
|
|
Регистрация: 16.12.2009
Сообщений: 422
|
|
Сообщение от Aetae
|
Я говорю о том, что раз змейка отрисовывается на canvas надо использовать методы canvas и тупо смотреть закрашена ли область.
|
и я о том, что-то вроде такого:
<script type="text/javascript">
var canvas = null;
var ctx = null;
function createRect(x, y, width, height, color) {
ctx.fillStyle = color;
ctx.fillRect(x, y, width, height);
}
function randomFood() {
var randX = Math.floor(Math.random() * canvas.width / 30);
var randY = Math.floor(Math.random() * canvas.height / 30);
var block = ctx.getImageData(randX * 30, randY * 30, 1, 1);
createRect(randX * 30, randY * 30, 30, 30, "#FF9900");
if(block.data[0] == 153 && block.data[1] == 204 && block.data[2] == 0 && block.data[3] == 255) {
alert("Попали на змейку!");
}
}
window.onload = function(e){
canvas = document.getElementById('map');
ctx = canvas.getContext("2d");
createRect(30, 30, 30, 30, "#99CC00");
createRect(60, 30, 30, 30, "#99CC00");
createRect(30, 60, 30, 30, "#99CC00");
createRect(90, 30, 30, 30, "#99CC00");
createRect(120, 30, 30, 30, "#99CC00");
createRect(150, 30, 30, 30, "#99CC00");
createRect(150, 60, 30, 30, "#99CC00");
createRect(150, 90, 30, 30, "#99CC00");
createRect(150, 120, 30, 30, "#99CC00");
}
</script>
<canvas id="map" width="200" height="200" style="border:1px solid #999999; float:left"></canvas>
<button onclick="randomFood()" style="float:left">Генерировать еду</button>
Но лучше использовать, наверное, стандартный подход ) Пробегать по массиву координат змейки, ведь там 1 цикл.
Последний раз редактировалось JsLoveR, 24.04.2013 в 00:34.
|
|
24.04.2013, 09:16
|
|
Профессор
|
|
Регистрация: 21.04.2012
Сообщений: 951
|
|
Aetae,
ну да верно и сразу решает проблему установки еды на еду и другие объекты
|
|
24.04.2013, 09:27
|
|
✔
|
|
Регистрация: 04.06.2012
Сообщений: 513
|
|
Сообщение от nerv_
|
делай с массивом и не страдай ерундой )
|
Сообщение от JsLoveR
|
Пробегать по массиву координат змейки, ведь там 1 цикл.
|
Ну а если длина змейки будет большой, массив всех её координат будет тоже большой. Пока пробежим по всему массиву, змейка будет стоять на месте, либо ползти, но на карте не будет еды (смотря как сделать), некрасиво получится(
Сообщение от Aetae
|
Я говорю о том, что раз змейка отрисовывается на canvas надо использовать методы canvas и тупо смотреть закрашена ли область.
|
То есть нужно брать методом getImageData массив пикселей (при чем это будет ведь квадратная область, и полученный массив будет больше обычного массива всех координат змейки), также пробегать по нему и смотреть попал/не попал на змейку. Но при большой длине змейки, массив будет немаленьким, и пробегать по нему будет довольно долго.
Сообщение от Dim@
|
Hekumok,
просто по логике змейка состоит из линий можно по поворотам узнать линии и соответственно координаты змеи полностью, но как я понял для тебя это не катит
|
Сообщение от Dim@
|
массив точек недоступных для помещения в них еды.
|
Так это ж и получится массив всех координат змейки
__________________
★ ²º¹³ ☆
Последний раз редактировалось Hekumok, 24.04.2013 в 09:34.
|
|
24.04.2013, 09:37
|
|
✔
|
|
Регистрация: 04.06.2012
Сообщений: 513
|
|
Сообщение от Aetae
|
Также возможно поможет isPointInPath()
|
Тьфу ты, блин, точно) благодарю))
__________________
★ ²º¹³ ☆
|
|
24.04.2013, 13:51
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,583
|
|
Сообщение от Hekumok
|
То есть нужно брать методом getImageData массив пикселей (при чем это будет ведь квадратная область, и полученный массив будет больше обычного массива всех координат змейки), также пробегать по нему и смотреть попал/не попал на змейку. Но при большой длине змейки, массив будет немаленьким, и пробегать по нему будет довольно долго.
|
То есть можно брать методом getImageData массив пикселей предполагаемой области появления еды, а не всей змейки. И зависит он, соответственно, только от размеров еды. Но если isPointInPath подходит, то, естесно, лучше юзать его.
__________________
29375, 35
Последний раз редактировалось Aetae, 24.04.2013 в 13:53.
|
|
24.04.2013, 19:38
|
|
✔
|
|
Регистрация: 04.06.2012
Сообщений: 513
|
|
Aetae, да-да, чё-т я конкретно тупанул
__________________
★ ²º¹³ ☆
|
|
|
|