Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Случайные координаты (http://www.flasher.ru/forum/showthread.php?t=145175)

Visio 01.10.2010 00:02

Случайные координаты
 
Собственно, какой вопрос возник...
Как сделать от 5 до 10(рандомно) мувиков(одинаковых) со случаными координатами, но так что бы мувики не налазили друг на друга (между ними было бы хотя бы пикселов 30) и не приближались к границе окна ближе чем, допустим 20 пикселов?
Буду благодарен за любые советы и помощь :)

iillyyaa 01.10.2010 00:54

я лично ничего не понял :)

AlesNormales 01.10.2010 01:06

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

gloomyBrain 01.10.2010 02:28

Цитата:

Неэлегантное решение, но должно работать
Если слегка переиначить - будет неплохим решением.
Для этого:
- разбиваем все поле на квадратные части
- создаем мувик и смотрим, сколько таких квадратных частей он может занимать
- находим на поле несколько свободных частей, повторяющих по форме мувик
- ставим мувик на поле и помечаем занятые им части (или больше не учитываем их при расчетах)
- далее все тоже самое, только занятые части не участвуют в расчете.

Если нужно плотное заполнение, максимально приближенное к таблице, то нужно сравнивать совпадение (то есть чтобы ячейка была свободна и в форме мувика, и в форме поля) построчно, и если первая строка ячеек мувика помещается на поле, то проверяем вторую, и тд и тп

t4arty 01.10.2010 02:51

Вложений: 1
пользуйся...

естественно, нужно немного переработать под свои нужды :) а замысел какой ты и хотел.

Visio 01.10.2010 03:44

to t4arty
Спасибо, обязательно код расковыряю, только вот жаль без коментариев. А потому разбирать буду уже, когда приеду со свадьбы брата, т.е. не раньше как после выходных :)

to gloomyBrain
Вариант интересный. Приеду, попробую. Очень интересно разобраться как такое сделать. Спасибо.

Visio 08.10.2010 05:49

Вложений: 1
Вот... приехал =)
Вожусь со своими мувиками. Единственное, что никак не выходит, это сделать, что бы они не пересекались. Киньте, кто-нить, простинький пример, пожалуйста.
Ps: что то не сообразил как флешку при атачить, потому размещаю сырец(мож кто, что присоветует :rolleyes:)

Visio 08.10.2010 07:03

Вот еще вопросец нарисовался. Как програмно узнать размер сцены?

i.o. 08.10.2010 07:27

stage.stageWidth / stage.stageHeight

Visio 08.10.2010 07:33

Цитата:

Сообщение от i.o. (Сообщение 941597)
stage.stageWidth / stage.stageHeight

Подходит =) Спасибо.

Добавлено через 5 часов 35 минут
В итоге нарисовалось ЭТО. Только оно все равно коряво работает. Периодически мувики налаживаются, даже с мин. кол-вом элементов.

Код AS3:

var cikle:Number = 5;
var item:Array = new Array();
var modX:Number = 0;
var modY:Number = 0;
 
//Создаем нужное кол-во экземпляров мувика
for (var i:int = 0; i<cikle; i++)
{
        var temp:simCha = new simCha();       
        temp.x = Math.random()*500;
        temp.y = Math.random()*280;
        for (var ii:int = 0; ii<item.length;ii++)
        {
                modX = Math.abs(item[ii].x - temp.x);
                modY = Math.abs(item[ii].y - temp.y);
                while (modX<60)
                {
                        modX = Math.abs(item[ii].x - temp.x);
                        temp.xMath.random()*500;
 
                }
                while (modY<50)
                {
                        modY = Math.abs(item[ii].y - temp.y);
                        temp.yMath.random()*280;
                        if (temp.y<30)
                        {
                                temp.y = temp.y +40;
                        }
 
                }
                trace(modX);
                //trace(modY);
        }
        item.push(temp);
        addChild(temp);
}

У кого какие мысли :away:


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

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