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

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.08.2005, 15:16
Takato вне форума Посмотреть профиль Отправить личное сообщение для Takato Посетить домашнюю страницу Takato Найти все сообщения от Takato
  № 1  
Ответить с цитированием
Takato
 
Аватар для Takato

Регистрация: Aug 2005
Адрес: не дом и не улица
Сообщений: 1,204
По умолчанию делаю стратегию - пара вопросов

Начал сегодня делать стратегию на флэше (тип - риал-тайм, ну вроде РедАлерта или СтарКрафта). Потихоньку продвигаюсь - но и проблемы, которые с ходу мне не решить, уже появились

Основной принцип такой - при нажатии на кнопку (например) появляется "юнит" (например soldat) из определенной точки (дверь казармы). Ну то есть обычный

duplicateMovieClip ("soldat", ima1, deep)
setProperty (ima, _x, ...);
...

и т д. ima с каждым юнитом увеличивается на единицу, глубина тоже - ну вобщем, все как обычно. А в самом клипе (soldat) уже написан собственно код, определяющий поведение юнита - если попадает в границы рамочки - значит он "обводится" (становится активным), если обведен и нажата кнопка мыши в каом-то месте на поле - значит он отправляется туда - и т. д. и т. п. Всё это уже работает - а теперь собственно проблемы


1) Так как глубина клипов задается при их копировании - солдаты перекрывают друг друга и здания как вздумается - то есть задний юнит вполне может загораживать переднего и т. д. Как можно сделать динамическое обновление "глубины" - то есть, если клип спускается "вниз" ("приближается") - то выходит на передний план - и наоборот?

2) В принципе, даже более важное - так как решив этот вопрос можно будет будет пойти на хитрости и забить на 1-ый -
как сделать "препятствия" - то есть, чтобы юниты не могли проходить друг-сквозь-друга и сквозь здания? Если бы это были статические препятствия небольшого кол-ва - например скалы - запрогить их было бы не сложно - но тут ведь может быть любое кол-во юнитов, которые постоянно движутся и должны соответственно влиять друг на друга
__________________
Давайте нанесем по ним ядерный удар!

Старый 04.08.2005, 15:24
Король вне форума Посмотреть профиль Отправить личное сообщение для Король Найти все сообщения от Король
  № 2  
Ответить с цитированием
Король
 
Аватар для Король

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 2,736
Отправить сообщение для Король с помощью ICQ
надо делать карту-сетку и в ней прописывать - где свободная клетка, где пустая. на основе карты генерить граф путей и по нему волновым алгоритмом искать дорогу для юнита.

Старый 04.08.2005, 15:36
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
По первому вопросу.
Игра в изометрии? Тогда делай глубину по координатам, а не последовательности появления на карте.
глубина = _y * максимальное значение поля по x + _x
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 04.08.2005, 15:46
Takato вне форума Посмотреть профиль Отправить личное сообщение для Takato Посетить домашнюю страницу Takato Найти все сообщения от Takato
  № 4  
Ответить с цитированием
Takato
 
Аватар для Takato

Регистрация: Aug 2005
Адрес: не дом и не улица
Сообщений: 1,204
Цитата:
Сообщение от Король
надо делать карту-сетку и в ней прописывать - где свободная клетка, где пустая. на основе карты генерить граф путей и по нему волновым алгоритмом искать дорогу для юнита.
Можно поподробнее? Хотя бы про сетку (юнитов пока и "тупыми" можно сделать). Это что-то вроде двухмерного массива например?

Цитата:
По первому вопросу.
Игра в изометрии? Тогда делай глубину по координатам, а не последовательности появления на карте.
глубина = _y * максимальное значение поля по x + _x
Да, "упрощенная" изометрия (то есть без разворота на 45 градусов). Тут причем такая проблема возникает, что если юниты стоят на одной "высоте" - то есть, на одном удалении от камеры - один из них изчезнет - т к глубина получится одинаковой
__________________
Давайте нанесем по ним ядерный удар!

Старый 04.08.2005, 15:53
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
но координаты то у них разные?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 04.08.2005, 16:04
Takato вне форума Посмотреть профиль Отправить личное сообщение для Takato Посетить домашнюю страницу Takato Найти все сообщения от Takato
  № 6  
Ответить с цитированием
Takato
 
Аватар для Takato

Регистрация: Aug 2005
Адрес: не дом и не улица
Сообщений: 1,204
Цитата:
Сообщение от iNils
но координаты то у них разные?
У меня всё-таки не полноценная изометрия - то есть, фактически, от х глубина не зависит - только от у. Поэтому просто так х-координату к у добавлять нельзя - а то получится вдруг х5+у15=х15+у5 - у двух клипов с разными координатами все равно получится одинкаовая глубина. Думаю, сделать что-то вроде - у*100+х - то есть, у, как более значимая в вычислении глубины переменная имеет основной вес, а х - просто как мелкое дополнение, как раз чтобы глубины не совпадали
__________________
Давайте нанесем по ним ядерный удар!

Старый 04.08.2005, 16:15
Король вне форума Посмотреть профиль Отправить личное сообщение для Король Найти все сообщения от Король
  № 7  
Ответить с цитированием
Король
 
Аватар для Король

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 2,736
Отправить сообщение для Король с помощью ICQ
Цитата:
Сообщение от Takato
Можно поподробнее? Хотя бы про сетку (юнитов пока и "тупыми" можно сделать). Это что-то вроде двухмерного массива например?

сетка - это просто массив клеток, на которых условно разделено поле игры с их координатами. граф - это двухмерный массив объектов-клеток, где для каждой клетки прописаны массив возможных "выходов" из нее - соответственно, для клетки, окруженный всеми свободными клетками, этот массив будет содержать 8 выходов, если вокруг есть занятные клетки - убиваем соответствущие элементы. имея граф, мы можем вычислить путь из одной клетки в другую, обходя занятые.

Старый 04.08.2005, 16:21
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от Takato
У меня всё-таки не полноценная изометрия - то есть, фактически, от х глубина не зависит - только от у. Поэтому просто так х-координату к у добавлять нельзя - а то получится вдруг х5+у15=х15+у5 - у двух клипов с разными координатами все равно получится одинкаовая глубина. Думаю, сделать что-то вроде - у*100+х - то есть, у, как более значимая в вычислении глубины переменная имеет основной вес, а х - просто как мелкое дополнение, как раз чтобы глубины не совпадали
Я тебе об этом и писал. Посмотри внимательно.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 04.08.2005, 19:35
Takato вне форума Посмотреть профиль Отправить личное сообщение для Takato Посетить домашнюю страницу Takato Найти все сообщения от Takato
  № 9  
Ответить с цитированием
Takato
 
Аватар для Takato

Регистрация: Aug 2005
Адрес: не дом и не улица
Сообщений: 1,204
Хм, что-то странное происходит при вставке в код мувиклипа следущего кода -

glu=y //глубина равна координате у мувика (для упрощения пока без х)
this.swapDepths(glu) //данный мувик отправляется на соответствующую шлубину

начинаются чудеса - после первого мувиклипа все последующие пропадают и начинает безбожно тормозить флэш. Попробовал различные вариации - либо примерно такой же, либо нет эффекта. Кто может сказать, в чем дело?
__________________
Давайте нанесем по ним ядерный удар!

Старый 04.08.2005, 20:50
Ромастый вне форума Посмотреть профиль Отправить личное сообщение для Ромастый Найти все сообщения от Ромастый
  № 10  
Ответить с цитированием
Ромастый
 
Аватар для Ромастый

Регистрация: Jan 2004
Адрес: На чердаке.
Сообщений: 1,112
Написал давным-давно для схожих целей простенький прототипчик - регулирует глубину залегания клипов в зависимости от их координаты Y:
Код:
MovieClip.prototype.sortDepths = function() {
	var movies = [];
	for (var i in this) {
		if (typeof (this[i]) == "movieclip") {
			movies.push(this[i]);
		}
	}
	//
	var Sorter = function (a, b) {
		if (a._y>b._y) {
			return 1;
		}
		if (b._y>a._y) {
			return -1;
		}
		else {
			return 0;
		}
	};
	movies.sort(Sorter);
	for (var i = 0; i<=movies.length-1; i++) {
		movies[i].swapDepths(i);
	}
};
Может чем поможет...
__________________
...Тебе страшно? Мне - нет.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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