Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Основные моменты разработки приложений

Оценить эту запись

Мои искания в создании флеш-стратегии (Часть 3. Привязка. Введение)

Запись от EndoCrinologist размещена 27.10.2011 в 15:42
Обновил(-а) EndoCrinologist 28.10.2011 в 09:41 (Добавил SWF-файл)

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

Привязка к сетке - это когда объект можно ставить не на каждом координатном пикселе сцены, а только на определенных участках, как бы минизоне, ограниченные одинаковыми размерами. Вот пример:

SWF-файл


Как этого добиться? Я нашел один способ, который немного нубский, но довольно работающий. Принцип его таков:

Начнем как всегда с железа:
1) Создайте мувик (Ctrl F8) с именем obj. В нем нарисуйте квадрат размером 40*40. Поместите на сцену с Instance Name obj.

Закончили с железом. Переходим к коду:

1) Поле разделяется на равное количество сегментов и по Х и по У. Например, поле Ш*В = 600*400, то по 40 пикселей на сегмент будет участков Ш*В = 15*10.

2) Теперь главное - мы высчитываем координаты мыши на поле с помощью такой вот функции:
Код AS1/AS2:
function refreshCoordsMouse(){
	xxm = _xmouse;
	yym = _ymouse;
}
setInterval(refreshCoordsMouse,1); //чтобы функция получала как можно актуальные данные
3) Теперь в этой же функции после получения координат, мы должны определить, на какой части из разделенных ранее частей, находится мышь:
Код AS1/AS2:
function refreshCoordsMouse(){
	xxm = _xmouse;
	yym = _ymouse;
 
	divOX = Math.ceil(xxm / 40);
	divOY = Math.ceil(yym / 40);
}
setInterval(refreshCoordsMouse,1);
Я взял именно Math.ceil(), потому что мне нужно получить именно округлённую в большую часть целое число, так как нуль частей быть не может.

4) Последняя функция, которая обновляет положение мувика на сцене, следя за координатами мыши:
Код AS1/AS2:
function refreshCoordsObj(){
	obj._x = divOX * 40 - 20; // - 20 потому, что объект размером 40*40 имеет привязку в углу, поэтому, мы её смещаем в центр
	obj._y = divOY * 40 - 20;
}
setInterval(refreshCoordsObj,1);
В результате мы получаем шикарную картину привязки объекта к сетке. Код несовершенен, конечно. Его можно улучшить. Но это сейчас не главное. Теперь мы разберемся, как мы это воплотим на нашей стратегии.

Спасибо за внимание
Вложения
Тип файла: rar linkerSWF.rar (3.2 Кб, 74 просмотров)
Всего комментариев 6

Комментарии

Старый 27.10.2011 16:31 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Хотелось бы сразу видеть ссылку на SWF или хотя бы приложенную картинку с результатом... ну лениво качать архив
Старый 27.10.2011 16:31 GBee вне форума
GBee
 
Аватар для GBee
Ага мне тоже, к тому же он РАР :о(
Старый 27.10.2011 16:59 EndoCrinologist вне форума
EndoCrinologist
 
Аватар для EndoCrinologist
А как мне выложить чисто swf?
Старый 27.10.2011 17:30 GBee вне форума
GBee
 
Аватар для GBee
Неужто своего сайтика нет, на том же народе?
Старый 27.10.2011 17:41 -De- вне форума
-De-
 
Аватар для -De-
Есть http://megaswf.com/ например) А вообще конечно неплохо бы сделать аплоад swf сюда. По-моему проблемы с безопасностью все решаемы.
Старый 27.10.2011 17:52 EndoCrinologist вне форума
EndoCrinologist
 
Аватар для EndoCrinologist
просмотрите статью, я выложил swf
 

 


Часовой пояс GMT +4, время: 00:25.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.