Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 23.04.2013, 23:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Сообщение от Dim@ Посмотреть сообщение
Aetae,
это логично, а если там змейка не в виде простых линий?
Пофигу. Главное чтоб фон отдельно рисовался.(что рекомендуют все уроки по canvas).
А дальше: в получившейся зоне есть непрозрачный пиксель? Значит false.)
__________________
29375, 35
Ответить с цитированием
  #12 (permalink)  
Старый 23.04.2013, 23:13
Любитель
Отправить личное сообщение для JsLoveR Посмотреть профиль Найти все сообщения от JsLoveR
 
Регистрация: 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.
Ответить с цитированием
  #13 (permalink)  
Старый 24.04.2013, 09:16
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Aetae,
ну да верно и сразу решает проблему установки еды на еду и другие объекты
Ответить с цитированием
  #14 (permalink)  
Старый 24.04.2013, 09:27
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

Сообщение от nerv_
делай с массивом и не страдай ерундой )
Сообщение от JsLoveR
Пробегать по массиву координат змейки, ведь там 1 цикл.
Ну а если длина змейки будет большой, массив всех её координат будет тоже большой. Пока пробежим по всему массиву, змейка будет стоять на месте, либо ползти, но на карте не будет еды (смотря как сделать), некрасиво получится(
Сообщение от Aetae
Я говорю о том, что раз змейка отрисовывается на canvas надо использовать методы canvas и тупо смотреть закрашена ли область.
То есть нужно брать методом getImageData массив пикселей (при чем это будет ведь квадратная область, и полученный массив будет больше обычного массива всех координат змейки), также пробегать по нему и смотреть попал/не попал на змейку. Но при большой длине змейки, массив будет немаленьким, и пробегать по нему будет довольно долго.
Сообщение от Dim@
Hekumok,
просто по логике змейка состоит из линий можно по поворотам узнать линии и соответственно координаты змеи полностью, но как я понял для тебя это не катит

Сообщение от Dim@
массив точек недоступных для помещения в них еды.
Так это ж и получится массив всех координат змейки
__________________
★ ²º¹³ ☆

Последний раз редактировалось Hekumok, 24.04.2013 в 09:34.
Ответить с цитированием
  #15 (permalink)  
Старый 24.04.2013, 09:37
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

Сообщение от Aetae
Также возможно поможет isPointInPath()
Тьфу ты, блин, точно) благодарю))
__________________
★ ²º¹³ ☆
Ответить с цитированием
  #16 (permalink)  
Старый 24.04.2013, 13:51
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Сообщение от Hekumok Посмотреть сообщение
То есть нужно брать методом getImageData массив пикселей (при чем это будет ведь квадратная область, и полученный массив будет больше обычного массива всех координат змейки), также пробегать по нему и смотреть попал/не попал на змейку. Но при большой длине змейки, массив будет немаленьким, и пробегать по нему будет довольно долго.
То есть можно брать методом getImageData массив пикселей предполагаемой области появления еды, а не всей змейки. И зависит он, соответственно, только от размеров еды. Но если isPointInPath подходит, то, естесно, лучше юзать его.
__________________
29375, 35

Последний раз редактировалось Aetae, 24.04.2013 в 13:53.
Ответить с цитированием
  #17 (permalink)  
Старый 24.04.2013, 19:38
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

Aetae, да-да, чё-т я конкретно тупанул
__________________
★ ²º¹³ ☆
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема координат Karandasheg jQuery 1 11.12.2012 18:53
Как проверить два обьекта на совпадение? abc_ua jQuery 2 16.03.2011 08:40
Реализация алгоритма (массив координат) ed_17 Общие вопросы Javascript 1 02.03.2011 19:25
Определение координат мыши! sat-lin Events/DOM/Window 2 18.12.2009 11:12
Определение координат body. Kolyaj Events/DOM/Window 10 04.04.2009 16:20