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

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

Закрытая тема
 
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
Как узнать что структура существует
Пробегаюсь по структуре лупом. Код на удалённых структурах начинает тупить. Как узнать что структура существует?

Код:
loop
exitwhen i>maxstructid
  set mystruct=i
  if [структура mystruct жива] then
    call anyactions()
  endif
  set i=i+1
endloop

Отредактировано Печатник lvl1, 07.07.2009 в 13:49.
Старый 07.07.2009, 13:32
J
expert
offline
Опыт: 48,447
Активность:
а зачем тебе пробегаться по ним лупом?
если у тебя спецальный масив в котором находятся структуры метод который нужно выполнить то заноси в масив только существующие структуры
Старый 07.07.2009, 13:44
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
метод не причём. просто мне сюда нужно какоето условие для проверки.

Опишу зачем луп. [Делаются юниты, юниты добавляются в группу, группа вместе с другими параметрами во вновь созданную структуру.] И так допустим 5 раз повторили. получилось подряд 5 id ячеек параллельных массивов(хз как назвать). Далее бегаю по ним лупом и делаю всякое)

Случай: Юниты из группы в id=3 все попередохли и я делаю [set mystruct=3; call mystruct.destroy() ] после этого код на i=3 d в лупе тупит.
Старый 07.07.2009, 14:00
J
expert
offline
Опыт: 48,447
Активность:
храни номер последней сруктуры, когда подыхает какаято структура перемещай на ее место структуры из последнего номера, и уменьшай номер последней структуры на ед.

J добавил:
здесь пример
Старый 07.07.2009, 14:04
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
А можно юзать переменные созданные после интерпретирования(о_0) VJass'a в Jass? Там же както это определяется, mystruct.create() пишется первую свободную ячейку, даж в моём случае(^) новая структура записалась бы не в 6, а в 3, которую я до этого удалил. Если там уже зафиксированы пустые ячейки мб заюзать информацию оттуда?
Старый 07.07.2009, 14:12
J
expert
offline
Опыт: 48,447
Активность:
Печатник lvl1 можно, но я бы не рекомендовал, лучше не смешивать 2 разные системы
да и в итоге при удалении структуры пробелы останутся, их будут заполнять новосозданые структуры, если ты создашь 50, удалишь 20, то 20 интераций будут лишними, до того как ты создаешь еще 20 структур, в процессе чего возможны еще удаления, что очень не оптимально, а то что я тебе говорю это решение где в массиве вообще отсутствуют пробелы
Старый 07.07.2009, 14:22
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
J, понял спасибо. буду разковыривать пример)
Старый 07.07.2009, 14:26
agentex

offline
Опыт: 34,834
Активность:
строго по сабжу: [имя структуры]!=0
Старый 07.07.2009, 14:27
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
agentex он брутфорсом присваивает им id, так что в его случае твое условие всегда будет истинно
Старый 07.07.2009, 15:11
agentex

offline
Опыт: 34,834
Активность:
Van Damm я же говорю:
Код:
строго по сабжу
Старый 07.07.2009, 15:25
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
я малость запутался. пример не понял многобукв. легче так всё представить.

пример: есть структуры с id 1 2 3 и запись в глобалке что последняя это 3. дестрою 2. и вот на этом остановился)
Код:
local struct str=2//удалённая
local struct laststr=3//крайний\максимальный id
// как присвоить и освободить последнюю?
set str=laststr
call lastlast.destroy()
// или сразу после удаления второй на её месте же создать новую и методом присвоить ей значения из laststr?
Старый 07.07.2009, 15:33
J
expert
offline
Опыт: 48,447
Активность:
в примере смотри только методы Add() и Delete()
Старый 07.07.2009, 15:41
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
ога.. значит структуру не трогать, а при удалении\создании использовать метод формирующий массив структур без пробелов. правильно понял?
Старый 07.07.2009, 15:53
J
expert
offline
Опыт: 48,447
Активность:
ну что-то типо... да
Старый 07.07.2009, 15:56
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
вот так сделал но чото неработает) ход мыслей правильный?

Код:
globals
creepsgroup array cgarray
integer cganext=0
endglobals

struct creepsgroup 
integer index

......

method addtocga takes nothing returns nothing
    set this.index=cganext
    set cgarray[cganext] = this
    set cganext=cganext+1
endmethod

method delfromcga takes nothing returns nothing
    set cganext=cganext-1
    set cgarray[.index] = cgarray[cganext]
    set cgarray[.index].index = .index
endmethod

endstruct


(исправлено)

Отредактировано Печатник lvl1, 10.07.2009 в 14:02.
Старый 10.07.2009, 12:48
J
expert
offline
Опыт: 48,447
Активность:
Код:
method delfromcga takes nothing returns nothing
    set cganext=cganext-1
    set cgarray[.index] = cgarray[cganext]
    set cgarray[.index].index = .index
endmethod
все остальное правильно
и переименую cganext переименуй во что-нибудь по нормальнее, переменная содержит количество нормальный структур буквально, так что и называй cgacount

J добавил:
также переменную index сделай приватной, потому что к ней не должен быть доступ из вне, т.к. обращается она только внутри структуры

J добавил:
также напомню что эти функции должны быть в самом верху структуры, потому что их могут вызывать другие методы из структуры, и если они вдруг будут находится ниже, то это не будет ошибкой но вызываться они будут неявно для тебя через Триггер
Старый 10.07.2009, 13:02
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
о да забыл индекс обновлять. а зачем приватность и менять название? для читаемости?
Старый 10.07.2009, 13:04
J
expert
offline
Опыт: 48,447
Активность:
менять название - для читаемости, чтобы переменная отображала суть
приватность - правильно с точки зрения инкапсуляции
Старый 10.07.2009, 13:07
Закрытая тема

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

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

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

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



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