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

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

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

Регистрация: Apr 2007
Сообщений: 1,369
По умолчанию Рандомное расположение объектов в неправильной форме

Кто-нибудь делал такое?
Нужно в неправильной фигуре расположить элементы разного размера, на картинке прямоугольники, но могу быть и другие.

Я даже не знаю с чего начать, с центра распологать первый элемент, или рандомно их расположить.

Сетку делать что ли, т.е. на сектора разбить так сказать, но я не знаю заведомо, какого размера объекты?

Может кто встречал такое?
Изображения
 
__________________
john

Старый 14.08.2009, 07:55
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Думаю, BitmapData тут подойдет.

Старый 14.08.2009, 13:19
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 3  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
очень сильно напоминает задачу о рюкзаке

Добавлено через 11 минут
прошу прощения, поторопился. врядли она вам подойдет
__________________
я могу стать всем, если только захочу

Старый 14.08.2009, 13:40
wer32 вне форума Посмотреть профиль Отправить личное сообщение для wer32 Найти все сообщения от wer32
  № 4  
Ответить с цитированием
wer32
 
Аватар для wer32

Регистрация: Dec 2008
Сообщений: 88
Ну возникла идея, может подойдет:
1. генеришь рандомный обьект (obj1).
2. создаешь невидимый спрайт неправильной формы (как и требуется)
3. ставишь obj1 в рандомное место и проверяешь на hitTest, если совпало то addChild, если нет, то снова генерим координаты

или hitPoint применять

ps идия сходу так что оцените может бредовая.

Старый 14.08.2009, 14:51
Just Alex вне форума Посмотреть профиль Отправить личное сообщение для Just Alex Найти все сообщения от Just Alex
  № 5  
Ответить с цитированием
Just Alex

Регистрация: Jul 2008
Сообщений: 10
У меня подобная функция работает. Только объекты прямоугольные, поэтому пользуюсь Rectangle'ом для проверки пересечений. Как предложил etc, BitmapData поможет обобщить это и на твой случай. И у меня часть объектов обязательно будут помещены на поле, другая часть может быть игнорирована (например, если после 100 попыток поместить, объект не нашел пустого места).

Алгоритм примерно такой:
1. создается цикл for по количеству объектов, которые надо "впихнуть"
2. задается максимальное кол-во попыток найти пустое место (maxTryCount). Зануляется текущий счетчик (tryCount) и значение emptySpaceFound = true.

В цикле do while:
3. создается/выбирается объект нужных размеров и с нужными координатами (у меня и то, и другое определяются случайно)
4. проверяется наличие свободного места (классы Rectangle и BitmapData дают достаточно средств, чтоб узнать, не пересекается ли создаваемый объект с уже существующими и "стенами")
5. дальше такой кусочек
Код AS3:
tryCount++;
if (tryCount > maxTryCount)
{
	emptySpaceFound = false;
	break;
}
6. заканчивается цикл while:
Код AS3:
} while (intersect); // объект пересекается с каким-то уже помещенным на поле объектом
7. после while
Код AS3:
if (emptySpaceFound)
{
	// добавляем объект в список добавленных на поле, рисуем его и т.д.
}
P.S. для объектов, которые обязательно надо поместить на поле заменяю:
Код AS3:
tryCount++;
на
Код AS3:
tryCount++;
maxTryCount++;
Но в этом случае нужно добавить другую защиту от бесконечного while.
__________________
Флеш игры. Пока все свои.
http://justalexi.com

Старый 14.08.2009, 14:56
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 6  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
В том и сложность этой задачи, что выбор случайных координат будет более-менее работать, пока объектов очень мало, а пустого места много. С каждым новым объектом вероятность пересечения со старыми возрастает.

Если фигура более-менее выпуклая, одним из простых возможных решений будет "утрамбовка" объектов "гравитацией".

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

Регистрация: Apr 2007
Сообщений: 1,369
Да, чем-то попахивает на задачу о рюкзаке, пока с BitmapData буду ковырять.
__________________
john


Последний раз редактировалось Molecula; 14.08.2009 в 15:00.
Старый 15.08.2009, 02:53
wer32 вне форума Посмотреть профиль Отправить личное сообщение для wer32 Найти все сообщения от wer32
  № 8  
Ответить с цитированием
wer32
 
Аватар для wer32

Регистрация: Dec 2008
Сообщений: 88
А что за подход с BitmapData? Совсем не понимаю идеи реализации.

Старый 15.08.2009, 14:14
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Нуу, пляски с hitTest-ом битмаповским, хотя наврядли он так просто тут поможет.

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

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

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


 


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


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