XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
Рандомная смена позиций
на основе этой системки, нужно рандомно поменять всех созданных юнитов местами, но чтобы привязанное дерево к определенному юниту, встало туда, где привязанный юнит.

варианты?
Прикрепленные файлы
Тип файла: w3x test.w3x (15.4 Кбайт, 2 просмотров )

Отредактировано Sidhe, 01.04.2012 в 11:01.
Старый 31.03.2012, 22:05
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
В какой момент времени? После создания уже?
Старый 31.03.2012, 22:40
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
а принципиально? как удобней будет.

просто у меня по циклу идет i++ ну и в массив объектов эта i вставляется obj[i], главное чтобы все созданные юниты оставляли за собой порядковый номер, вне зависимости от их положения
Старый 31.03.2012, 22:44
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
» code
function randomize_objs takes integer size returns nothing
    local integer array useful_numbers
    local integer index=0
    local integer un_size=size
    loop
        exitwhen index<size
        set useful_numbers[index]=index
        set index=index+1
    endloop
    index=0
    loop
        exitwhen index<size
        set new_index=GetRandomInt(0,un_size)
        call SetUnitPosition(obj[index],GetUnitX(obj[useful_numbers[new_index]]),GetUnitY(obj[useful_numbers[new_​index]]))
        if (new_index<un_size) then
            set useful_numbers[new_index]=useful_numbers[un_size]
        endif
        set un_size=un_size-1
        set index=index+1
    endloop
endfunction
Hellfim добавил:
я скиловый парень, да
\m/
Старый 31.03.2012, 23:28
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
блин немного запутался в переменных, мог бы по моим зделать?))
Старый 31.03.2012, 23:30
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
Sidhe, из твоих используется только obj, + там ошибка в коде, сейчас перепишу.
» code
globals
 
    private constant real DefaultStartX = -255        
    private constant real DefaultStartY = 255                   

    private constant integer ObjMax = 50            // максимальное число объектов
    private constant integer RowMax = 10           // длина строки
    
    private constant real next = 9.                     // дистанция между объектами

    private real array table_coord                      // координатная сетка
    private unit array object                              // массив объектов-юнитов (зачем тебе юниты, лол?)
endglobals


function CreateTable takes nothing returns nothing
// начальная точка для создания объектов (первая строчка, первого столбца)
    local real CreateStartX = DefaultStartX
    local real CreateStartY = DefaultStartY

    local integer max = 0
    local integer row = 0
    
    loop
        set max = max + 1
        
        if row == RowMax
            set row = 0
            set CreateStartX = DefaultStartX        // возвращение начального значения, для перехода к началу строки
            set CreateStartY = CreateStartY-next    // установка на следущую строку
        endif
        
        set object=CreateUnit(<Player>, <unit_rawcode>, CreateStartX, CreateStartY, <unit_facing>)
        set table_coord[2*max]=CreateStartX
        set table_coord[2*max+1]=CreateStartY

        set row = row + 1
        set CreateStartX = CreateStartX + next
        exitwhen max == ObjMax
    endloop

endfunction

function shuffle takes integer size returns nothing
    local integer array useful_numbers
    local integer index=0
    local integer un_size=size
    //Забиваем массив свободны номеров:
    loop
        exitwhen index<size
        set useful_numbers[index]=index
        set index=index+1
    endloop
    //Обрабатываем все объекты:
    index=0
    loop
        exitwhen index<size
        set new_index=GetRandomInt(0,un_size) //Получаем индекс для массива useful_numbers, в этом массиве наш случайный индекс
        call SetUnitPosition(object[index],table_coord[useful_numbers[2*new_index]]),table_coord[useful_numbers[2​*new_&#8203;index+1]])) //устанавливаем юнита в позицию, если не использовать массив, то через какое-то время юниты начнут вставать друг на друга, т.к. часть уже переставлена
        if (new_index<un_size) then
            set useful_numbers[new_index]=useful_numbers[un_size] //Если наш индекс для useful_numbers не последний, то нам надо последний поставить на его место
        endif
        set un_size=un_size-1
        set index=index+1
    endloop
endfunction
Старый 31.03.2012, 23:53
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
ошибка в коде ? Оо ))

не пашет, вроде как...смысл понял, но все таки что то не то
Старый 01.04.2012, 11:02
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
все еще нужны варианты
Старый 09.04.2012, 22:45
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



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