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

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

Рейтинг: 2.67. Голосов: 3.

Мои искания в создании флэш-стратегии (Часть 1)

Запись от EndoCrinologist размещена 25.08.2011 в 15:31
Обновил(-а) EndoCrinologist 28.10.2011 в 09:39

Всем доброго времени суток!

Начал создавать флэш-стратегию и решил поделиться своим "сочинением" в AS2, позволяющее Вам "взять" здание из имеющихся в Вашем списке и "перенести" его в поле для начала его строительства.

P.S. Кому это не надо или тот, кто просто решил посмеяться - прошу дальше не читать. А вот дать дельный совет - можно.

Итак. Этап первый. Буду показывать предельно примитивный пример "строительства". Начнем с железа:
1. Войдите в основную сцену и проведите ДВЕ грани: с правой стороны сцены одну полосу (отступ справа 60 px) и с нижней стороны одну линию (отступ снизу 100 px). Это будут наши "панели": в правой части будут располагаться доступные сооружения, а в нижней - основное меню и прочее. Но зацикливаться мы на этом не будем. Это линии, просто обозначающие поля, где построить будет здание невозможно.
2. Создайте новый Movie Clip под любым названием и начните его редактировать. В первом кадре нарисуйте круг, в 40-ом - квадрат. Выделите кадры и создайте shape-анимацию (это мы создали примитивное строительство нашего объекта). В первом и последнем кадре нашего "сооружения" вставьте код:
Код AS1/AS2:
stop();
Это нужно, чтобы здание не начало своё строительство прямо на панели и не зацикливало его, когда оно закончится.
3. Поместите наш мувик на основную сцену и назовите экземпляр obj1.

Теперь, второй этап: пошаговое написание кода AS2.
1. Создайте новый слой, назовите его Actions (слой с "железом" можно назвать Железо).
2. Сначала проинициализируем игру функцией initGame() и сразу же её выполним:
Код AS1/AS2:
function initGame(){
	bordx = 60; // это координаты наших границ строительства по Х
	bordy = 100; // это координаты наших границ строительства по У
	newx = 0; // это необязательный код новых координат объекта по Х при отпускании мыши.
	newy = 0; // это необязательный код новых координат объекта по У при отпускании мыши.
	dx = 0; // это необязательный код изменения координат объекта по Х при отпускании мыши относительно сцены.
	dy = 0; // это необязательный код изменения координат объекта по У при отпускании мыши относительно сцены.
	sw = Stage.width; // ширина сцены
	sh = Stage.height; // высота сцены
	oldx = obj1._x; // инициализируем старые координаты объекта по Х, чтобы возвращать его обратно на место
	oldy = obj1._y; // инициализируем старые координаты объекта по У, чтобы возвращать его обратно на место
	o1w = obj1._width; // ширина объекта
	o1h = obj1._height; // высота объекта
}
initGame();
3. Теперь нам нужно создать обработчиков событий нажатия и отпускания мыши на объекте. Начнем с нажатия. Код предельно прост:
Код AS1/AS2:
obj1.onPress = function():Void{
	this.startDrag(true); // запускаем переноску объекта с привязкой к центру
}
4. Теперь, самая сложная и большая функция - обработка отпускания. Мы должны проследить, отпущен ли объект в разрешенной зоне или нет:
Код AS1/AS2:
obj1.onRelease = function():Void{
	newx = obj1._x; // присваиваем новую координату Х объекта
	newy = obj1._y; // присваиваем новую координату У объекта
	dx = sw - newx; // находим разницу между шириной сцены и полученной новой Х-координатой объекта
	dy = sh - newy; // находим разницу между высотой сцены и полученной новой У-координатой объекта
	numx = o1w / 2 + bordx; // находим расстояние запрещенной зоны справа
	numy = o1h / 2 + bordy; // находим расстояние запрещенной зоны снизу
 
	if (dx >= numx){ // если разница между шириной и новой Х-координатой объекта БОЛЬШЕ запрещенной правой зоны, то ...
		trux = true; // получаем разрешение по Х-координате
	} else { // Иначе ...
		trux = false; // разрешение по Х-координате не получено
	}
	// Тоже самое проделываем и по координате У:
	if (dy >= numy){
		truy = true;
	} else {
		truy = false;
	}
 
	if ((trux == true)&&(truy == true)){ // Если оба разрешения получены...
		this.stopDrag(); // ...то оставляем объект на новом месте...
		this.play(); // ...и начинаем его строительство.
		this.enabled = 0; // запрещаем дальнейшее перетаскивание объекта.
	} else { // Иначе...
		// Переставляем объект на место (на левую панель)
		this._x = oldx; 
		this._y = oldy;
		this.stopDrag(); // остановка перетаскивания
	}
}
Конечно, данный код может быть несовершенным, громоздким и неуклюжим, но он всё-таки работает. Можно, конечно же, его улучшить, например, дублируя "сооружение", тем самым разрешая создание его многочисленных копий. Или, например, добавив нужные цифры в нужные переменные, сделать еще и ограничения слева и сверху. Но я рассказал всего лишь простой метод. Как его совершенствовать - решать самим.

Спасибо за внимание
Вложения
Тип файла: rar strategy_demo.rar (4.8 Кб, 220 просмотров)
Всего комментариев 20

Комментарии

Старый 26.08.2011 13:41 TERRORist вне форума
TERRORist
 
Аватар для TERRORist
Ого, не знал что на AS2 еще кто-то пишет.

Я бы немного сократил код за счет этого:
Код AS3:
truy = dy >= numy
//вместо
if (dy >= numy){
		truy = true;
	} else {
		truy = false;
	}
Хотя, если код рассчитан на чайников то конечно лучше развернуто писать.

Ну, и чтобы написать игру - надо сначала хоть какую то доку написать. Дизайндокумент или что то подобное. Даже для себя. Так что это первый этап.
Старый 26.08.2011 14:32 КорДум вне форума
КорДум
 
Аватар для КорДум
Так это же AS1
Старый 28.08.2011 21:34 MrPoma вне форума
MrPoma
 
Аватар для MrPoma
Данный код может быть несовершенным
Старый 28.08.2011 22:38 ChuwY вне форума
ChuwY
 
Аватар для ChuwY
А никто не может сохранить под более новую версию?
А то не открывает
Старый 29.08.2011 03:32 in4core вне форума
in4core
 
Аватар для in4core
ChuwY - бросай ас2
Старый 29.08.2011 16:03 ChuwY вне форума
ChuwY
 
Аватар для ChuwY
Да бросил уже. Понастольгировать хочется
Старый 28.10.2011 00:45 dark256 вне форума
dark256
 
Аватар для dark256
Я что-то ничего не понял
Старый 28.10.2011 01:18 EndoCrinologist вне форума
EndoCrinologist
 
Аватар для EndoCrinologist
А что именно не поняли?
Старый 28.10.2011 01:31 dark256 вне форума
dark256
 
Аватар для dark256
А в чем же соль?
Старый 28.10.2011 01:39 EndoCrinologist вне форума
EndoCrinologist
 
Аватар для EndoCrinologist
на этом основа 99% стратежных флеш-игр) да и я прописал в начале статьи
Цитата:
P.S. Кому это не надо или тот, кто просто решил посмеяться - прошу дальше не читать
Старый 28.10.2011 01:57 ProxyGreen вне форума
ProxyGreen
 
Аватар для ProxyGreen
Цитата:
на этом основа 99% стратежных флеш-игр)
Откуда такие данные?
Старый 28.10.2011 02:01 EndoCrinologist вне форума
EndoCrinologist
 
Аватар для EndoCrinologist
во первых, посудите сами. взял, перетащил, оставил. взял перетащил оставил. а там уже и самому придумать можно, что эти здания будут делать.
про создание юнитов я молчу. это вообще отдельная статья. а так - это основа основ. данные из интернета и опыта.
Старый 28.10.2011 02:21 ProxyGreen вне форума
ProxyGreen
 
Аватар для ProxyGreen
Так и что?
Старый 28.10.2011 08:25 EndoCrinologist вне форума
EndoCrinologist
 
Аватар для EndoCrinologist
что "и что?". вы задали вопрос - я ответил. это раз. и к тому же я же не просил читать вас статью. если вам не нравится - прошу здесь не находиться
Старый 28.10.2011 09:32 ProxyGreen вне форума
ProxyGreen
 
Аватар для ProxyGreen
Ну да у спрайтиков припасён метод что-бы таскать (или не таскать) их за курсором, но при чём здесь "95% стратегий"?
Между тем вы забампили в подвал своими "статьями" другие посты. А я бешусь когда вместо одного бессмысленного действия мне нужно совершать сразу несколько.
Старый 28.10.2011 09:37 EndoCrinologist вне форума
EndoCrinologist
 
Аватар для EndoCrinologist
Вас никто не просит их совершать
Старый 28.10.2011 12:28 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
но при чём здесь "95% стратегий"?
73.4% всех статистических данных берутся с потолка =)
Старый 28.10.2011 17:15 EndoCrinologist вне форума
EndoCrinologist
 
Аватар для EndoCrinologist
хаха +1
Старый 29.10.2011 05:56 ProxyGreen вне форума
ProxyGreen
 
Аватар для ProxyGreen
Ясно. Мистер "Яжнепросил" читает лекцию: "ДрагАндДроп - основа основ". ЛоЛ.
Старый 17.01.2012 02:08 Tails вне форума
Tails
 
Аватар для Tails
А какова рода игру собрались делать, DUNEII ?
Данная статья больше похожа на начало создания игры "одевалка/раздевалка", или "собери пазл".
 

 


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


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