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

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

Закрытая тема
 
Toadcop

offline
Опыт: 53,013
Активность:
[Task] Х Groups
короче очередная простая задачя которую ни кто наверно не будет решать =).
перейду сразу к делу.
допустим у нас есть динамическая возможность создовать звуки ! и каждый созданый нами звук надо что бы можно было и манипулировать (имеет к нему доступ) обращения со звука "на запись" НЕ надо т.е. главное что бы могли "взять" нужный звук и когда надо выполнить над ним операцию а точнее:
нужен оптимальный способ для манипуляциями всеми создаными звуками !
т.е.
...
loop
...
call DoSomethingWithSound(cursound)
...
endloop
...
надо организовать что то вроде вот такого =) т.е. своего рода "группу звуков" но вот всё упираетьса в производительность и оптимальность.
ЗЫ надеюсь хоть кто нить запоститса =)
задачя решаетьса без РБ и кеша коненчо же ;)
здесь есть маленькое жопоумие =)
вообщем просто + еще раз НАМ НЕ надо получать с хендла звука его позицию и т.д. ! здесь упор в оптимальность...

Отредактировано ShadoW DaemoN, 07.08.2008 в 00:14.
Старый 24.05.2007, 14:11
Q

offline
Опыт: 360,164
Активность:
Ы? Поясните свою концепцию подробнее, товарищ...
Старый 24.05.2007, 14:17
Toadcop

offline
Опыт: 53,013
Активность:
ок тупой пример что бы было понятней =)
ха лол пример забыл xD ! ну ничего описано впринципе теперь понятно.
вообщем моя задачя заключаетьса в том найти оптимальный способ "пробигатьса" (заполнять/удалять) массив любых объектов !
т.е. мы узаем стек для быстрого добовления или удаления ! (из списка) но список такого характера после определёных операцих будет "дырявый" т.е. будут занятые слоты и нет ! (это кончено можно фиксить но теряя ужасно много ресурсов !)
короче нужно создать универсальную группу для лубых объектов (в текущем случаи 1 группу)
в которой можно
  1. быстро добавлять елемент
  2. быстро удалять его от туда
  3. делать быструю пробешку (луп,цикл) по этой самой группе
вот типо так =)
как всегда у меня коненчо есть решение (иначе бы я не задавал этот бы вопрос/задачю здесь =))

Отредактировано Toadcop, 24.05.2007 в 14:31.
Старый 24.05.2007, 14:24
DioD

offline
Опыт: 45,184
Активность:
это типа ты хочешь что бы было 2 массива один с объектами другой с списком свободных ячеек.
тогда массив конечно же дырявый но вот получение слота всегда происходит мгновенно, смотреть СДАРС там это есть, хотя и не работает так какнадо из за пары логических ошибок
Старый 24.05.2007, 14:39
Toadcop

offline
Опыт: 53,013
Активность:
мне это не надо у меня оно есть =)
+ это не так... (по крайней мере в моём случаи) + если дело пошло так то выкладываейте примеры =) (имеено связаные с этой темой)
Старый 24.05.2007, 14:54
J
expert
offline
Опыт: 48,747
Активность:
P.S.
Пояснения для нубов:
тоадкопик дал задачу, смысл котрый в нахождении оптимального алгорима, делающего тоже самое что и подобная конструкция:
Код:
globals
    sound array Massiv
    integer Slot = 0
endglobals

function AddSound takes sound S returns nothing
    set Massiv[Slot] = S
    loop
        exitwhen Slot > 8190 or Massiv[Slot] == null
        set Slot = Slot + 1
    endloop
endfunction

function RemoveSound takes sound S returns nothing
    local integer i = Slot-1
    loop   
        exitwhen i < 0
        if Massiv[i] == S then 
            set Massiv[i] = null
            if i < Slot then
                set Slot = i
            endif
        endif
        set i = i - 1
    endloop
endfunction
Старый 24.05.2007, 15:57
Toadcop

offline
Опыт: 53,013
Активность:
да это примитивный набросок ! =)
но вообщем всё делаетьса без циклов...
Старый 24.05.2007, 16:00
DioD

offline
Опыт: 45,184
Активность:
через нативки это не решается, так что единственный действенный способ без ретурн бага и кеша кроме как создания глобалки на звук, устанавливать нужную длительность звуку и забивать на него.
Старый 24.05.2007, 17:29
Toadcop

offline
Опыт: 53,013
Активность:
рофл ! я уссалсо когда прочитал =) да а кто говорит про его удаление + иммено про звуки !?
короче надо уметь импровизировать ! это рулз !
Старый 24.05.2007, 18:12
DioD

offline
Опыт: 45,184
Активность:
я не понимаю тебя, тебе нужны массивы с картой\деревом\списком или еще какой то изврат?
Старый 24.05.2007, 18:28
Toadcop

offline
Опыт: 53,013
Активность:
DioD мне надо то что работает ! мне без разници как ты это реализуеш ! не путай ХГМ с Бру ;)
еще жду ваших предложений и вариантов =)
Старый 24.05.2007, 20:39
0pJl9lTa

offline
Опыт: 2,997
Активность:
Код:
function B2I takes boolean W, integer A, integer B returns integer
 if W then
  return B
 else
  return A
 endif
endfunction

function SetData takes integer Data returns nothing
 if udg_Num > 8000 then
  set udg_Num = udg_Num - 1
  set udg_Ints[udg_Index[udg_Num]] = Data
  set udg_Index[Data] = udg_Index[udg_Num]
 else
  set udg_Ints[udg_NextFreeInt] = Data
  set udg_Index[Data] = udg_NextFreeInt
  set udg_NextFreeInt = udg_NextFreeInt + 1
 endif
endfunction

function GetData takes integer Data returns integer
 set udg_Index[udg_Num] = udg_Index[Data]
 set udg_Num = udg_Num + 1
 return udg_Index[Data]
endfunction

function RemoveData takes integer Data returns nothing
 set udg_Ints[GetData(Data)] = 0
endfunction



код жоника можно считать за хз чо

Воопчем меня задели слова "все делаеться без циклов", только поэтому я решил попробовать...
Вообще без циклов\кеша достаточно трудно работать :) начал я с простого

Записи и чтения интегеров. Правда появились ограничения:
1 - Нельзя записывать 2 одинаковых интегера в массив
2 - Максимальная разница между кол-вом добавления и удаления элементов массива, равно 191 разу. Легко исправлеяться смещением оффсета, но тогда кол-во элементов массива падает.
3 - Чо то еще было, непомню :)

Сеня устал, завтра подумаю исчо

Отредактировано ZlaYa1000, 25.05.2007 в 00:57.
Старый 25.05.2007, 00:34
Toadcop

offline
Опыт: 53,013
Активность:
вообщем нет =) (тестил лажо как то =( ) у ФелГарда лутче вышло (но еще не полностью...)

Цитата:
Отредактировано ZlaYa1000, 24.05.2007 в 23:57.
ясно... =)
Старый 25.05.2007, 01:52
0pJl9lTa

offline
Опыт: 2,997
Активность:
а где скрипт фел гарда? хз
я крмое сваего скрипта ваще ничо нивижу О_О
Старый 25.05.2007, 11:09
Toadcop

offline
Опыт: 53,013
Активность:
Цитата:
а где скрипт фел гарда? хз
я крмое сваего скрипта ваще ничо нивижу О_О
тк зачем камуниздить ;) он прислал мне код по асе... + ну + ты слепой как видно а Jon что сделал ?! ну имхо оно просто не оптимально но зато (вроде) работает ! так что еще задачя не решена =)
Старый 25.05.2007, 13:36
0pJl9lTa

offline
Опыт: 2,997
Активность:
Тупите товарищи...
смысл создания топа? Оптимальное решение проблемы... аффтар сам знает как делать, следовательно задача юзверям... а если никто не выкладывает, значит просто не могут :дуно:
я например тебе как судье, который будет решать у кого лучше, не доверяю, ибо скрипты у тя чушь
Старый 25.05.2007, 13:44
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
хватед сраццо + вот тот код который я выкладывал Тоадкопу вчера (седня он преьерпел некоторые изменения всвязи с сумбуром в массиве-ид)
Код:
function AddSnd2Group takes sound Sound returns integer
    set udg_snd_index = udg_snd_index + 1
    set udg_snd_archive[udg_snd_index] = Sound
    set udg_snd_adress[udg_snd_index] = udg_snd_index
    return udg_snd_index
endfunction

function RemoveSndFromGroup takes integer Index returns nothing
    set udg_snd_archive[Index] = set udg_snd_archive[udg_snd_index]
    set udg_snd_adress[Index] = set udg_snd_adress[udg_snd_index]
    set udg_snd_archive[udg_snd_index] = null
    set udg_snd_adress[udg_snd_index] = 0
endfunction

function GetSndById takes integer Index returns sound
    local integer i = 1
    loop
      exitwhen i > udg_snd_index or i == udg_snd_adress[ i ]
        set i = i + 1
    endloop
    return udg_snd_archive[ i ]
endfunction
код несовершенен, ибо при удалении сбивается идентификатор последнего объекта

FellGuard добавил:
опять же, как полностью обойтись без лупов я еще не допер, так что вылаживайте свои примеры товарещи)
Старый 25.05.2007, 17:47
Toadcop

offline
Опыт: 53,013
Активность:
ну уже лутче =) теперь надо "доработать" !
Старый 25.05.2007, 18:11
0pJl9lTa

offline
Опыт: 2,997
Активность:
Моей задачей было сделать поиск элементов без цикла.. здесь он присутствует... код ничо :)
Старый 25.05.2007, 20:39
DioD

offline
Опыт: 45,184
Активность:
Четвёртая версия СДАРС, суть в том что нажатием на ESC вы "помещаете" объект в массив занимая один слот

через ввод команд ну например 10 или 15 вы освобождаете указаный слот.


есть 2 существенные недоработки
1) освободив свободный слот вы убиваете весь массив
2) заняв занятый слот - то же

первое я править не стал а вот второе уже свершить не удастца.

DioD добавил:
---
маленький скорее графический баг, показывались не те числа что надо
Прикрепленные файлы
Тип файла: w3x SDARS_v4.w3x (8.1 Кбайт, 21 просмотров )
Тип файла: w3x SDARS_v4.w3x (9.1 Кбайт, 25 просмотров )
Старый 25.05.2007, 21:12
Закрытая тема

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

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

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

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



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