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

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

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

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

Запись от EndoCrinologist размещена 27.10.2011 в 18:06
Обновил(-а) EndoCrinologist 28.10.2011 в 09:42

Для начала нам нужно разобрать в одной вещи.
Функция startDrag();, которую мы использовали в своей игре, прикрепляет к мыши наш объект и он следует за ней, совсем не следя за нашими ячейками поля. Поэтому, мы немного подправим нашу функцию.

А в каком направлении мы её подправим? А в таком, что мы добавим переменную, следящую за тем, взят ли объект с места или нет. То есть, переменная будет принимать значение true (взято) и false (оно на панели). Но для начала еще кое-что.

У нас есть 2 способа, чтобы визуально определять, над каким квадратом находится наше сооружение:
1) событие obj1.onPress сделает черный квадрат, который будет двигаться по ячейкам, а при отпускании произойдет установка сооружения на месте квадрата.
2) событие obj1.onPress будет активировать тот же startDrag();, но при отпускании сооружение установится согласно ячейке.
Думаю, самым продуктивным способом, который не требует вмешательства в железо, будет №2. Ведь здесь потребуется лишь создавать дополнительные функции-обработчики, которые будут ответственны, например, за то, что не произошло ли отпускание мыши на другом здании.


Теперь можно приступать к реализации:

1) Для начала нам нужна регуляция наших нажатий и отпусканий. Для этого в функции initGame(); добавим строку:
Код AS1/AS2:
drags = false;
Это говорит о том, что нажимание еще не произошло.

2) Теперь добавим в функцию obj1.onPress = function(){} противоположенную строку
Код AS1/AS2:
drags = true;
Это говорит о том, что произошло нажатие на сооружение

3) Теперь в функции obj1.onRelease = function(){} мы добавляем строку в указанных местах:
Код AS1/AS2:
obj1.onRelease = function():Void{	
	pay = 100;
	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)){
		if (allMoney >= pay){
			this.stopDrag();
			allBuilds++;
			allMoney -= pay;
			obj++;
			duplicateMovieClip("obj1", "obj"+obj, getNextHighestDepth());
			eval("obj"+obj)._x = newx;
			eval("obj"+obj)._y = newy;
			eval("obj"+obj).stop();
			eval("obj"+obj).play();
			obj1._x = oldx;
			obj1._y = oldy;
			info.text = "Здание куплено за " + pay + " кредитов";
			drags = false; // ======================ЗДЕСЬ======================
		} else {
			info.text = "Не хватает денег";
			this._x = oldx;
			this._y = oldy;
			this.stopDrag();
			drags = false; // ======================ЗДЕСЬ======================
		}
	} else {
		this._x = oldx;
		this._y = oldy;
		this.stopDrag();
		drags = false; // ======================ЗДЕСЬ======================
	}
}
Это нужно для того, чтобы действия перестали повторяться после завершения процедуры. При проверке, вы можете увидеть, что нажимая, а затем отпуская мышь на сооружении, значение drags динамично меняется true <-> false.

Итак, подготовку мы закончили. Приступим к более сложной процедуре.

Спасибо за внимание
Всего комментариев 0

Комментарии

 

 


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


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