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

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

Ответ
 
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
string GetUnitTypeIcon(int raw) {
Я хочу написать функцию. По названию, я думаю, понятно, какой принцип - функция забирает юнита и возвращает его иконку, которая находится в РО.
Старый 20.05.2010, 16:07
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
тут без бд никак
Старый 20.05.2010, 16:09
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
16GB,
Могу прописать в массив строк все иконки, но как с ними оперировать?
Старый 20.05.2010, 16:09
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
ну номер массива иконки равен номеру массива юнита ну юнитов тоже заносишь
Старый 20.05.2010, 16:13
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
// globals
unit array U
string array S
int c=0 // max
// ===

function u2icon takes unit u returns string
	local integer i=0

	loop
	exitwhen i>=c
	if u==U[i] then
	return S[i]
	endif
	set i++
	endloop
endfunction

function onInit void
	set U[0] = 'h000' // начиная с ячейки #0
	set S[0] = "textures\black32.blp"
...
set c=1
endfunction
Старый 20.05.2010, 16:43
Elf_Stratigo

offline
Опыт: 4,699
Активность:
иконки могут повторяться, лучше какую-нибудь хеш-функцию
Старый 20.05.2010, 21:41
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
иконки могут повторяться
обоснуй, или будет выглядеть как флуд
Старый 20.05.2010, 22:04
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Elf_Stratigo, и что? Мы ищем по ид юнита.
Старый 20.05.2010, 22:08
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
я кстати ошибку нашел в своем коде.. вот правильный..
// globals
integer array U
string array S
int c=0 // max
// ===

function u2icon takes unit u returns string
	local integer i=0

	loop
	exitwhen i>=c
	if u==U[i] then
	return S[i]
	endif
	set i=i+1
	endloop

return ""
endfunction

function onInit takes nothing returns nothing
	set U[0] = 'h000' // начиная с ячейки #0
	set S[0] = "textures\black32.blp"
...
set c=1
endfunction
Старый 20.05.2010, 22:20
adic3x

offline
Опыт: 108,439
Активность:
Я бы сразу выганял программистов, которые используют поиск перебором в случаях, когда количество элементов неопределено.
По теме - либо делать близкие равкоды юнитам и бд размещаеть в массиве, либо использовать хешь и не изобретать велосипед.
Все отписавшиеся в теме (кроме меня конечно) не шарят.
Старый 21.05.2010, 11:54
ScorpioT1000
Работаем
offline
Опыт: отключен
кроме перебора составить бд без анального преобразования равкодов в ро никак.
// cJass
#include "cj_types.j"
#define utype int

struct uicons {
    static uicons All
    static int count=0
    utype u
    string p
    
    static uicons New(utype unitCode, string iconPath) {
        uicons this = uicons.create()
        .u = unitCode
        .p = iconPath
        .All[.count] = this
        .count++
        return this
    }
    static string GetPath(utype unitCode) {
        int i=0
        whilenot(i >= uicons.count) {
            if(uicons.All[i].u == unitCode) {
                return .All[i].p
            }
            i++
        }
        return null
    }
}

// сама функция
string GetIconPathFromUnitType(utype unitCode) { return uicons.GetPath(unitCode) }

// заполнение бд
{
    uicons.New('raw1',"path1")
    uicons.New('raw2',"path2")
    uicons.New('raw3',"path3")
    //...
}
адик, ты там не шаришь, метод перебора даже 50000 элементов идёт считанные миллисекунды, а я уверен эта функция вызывается не в периоде
есть способ для онли кастомных равкодов
я могу написать точно такое же решение, не используя перебор или кеш, но смысл ?) просто у нас индекс иконки будет равен равкоду со смещением
ScorpioT1001 добавил:
и да, предыдущий код скомпилируется с ошибкой
ScorpioT1001 добавил:
автор, если тебе надо перебирать 200+ элементов с высокой скоростью, тогда не юзай это решение, а юзай это xgm.ru/project.php?id=100&page=about_int
Старый 21.05.2010, 12:39
adic3x

offline
Опыт: 108,439
Активность:
ты там не шаришь, метод перебора даже 50000 элементов идёт считанные миллисекунды
в жассе?
Я еще рас спрошу, почему нельзя использовать хешь?
Старый 21.05.2010, 15:53
ScorpioT1000
Работаем
offline
Опыт: отключен
ещё раз отвечу потому что более 28%, например, моей целевой аудитории имеет версию ниже 1.24
Старый 21.05.2010, 15:55
adic3x

offline
Опыт: 108,439
Активность:
В таком случае хешь, всеравно ведь быстрее имхо.
ADOLF добавил:
Тьфу, кеш, ну Вы поняли короче.
Старый 22.05.2010, 01:35
inhuman89

offline
Опыт: 3,019
Активность:
...or,you can put point value to STRING number with is even better
HERO - set his pointvalue in object editor to 1
...
set ICON to STRING[point value of HERO]
======================================================
это отрывок поста с хайва.
Если этот поинт валью они юзают как хотят, не боясь за какие либо изменения в игре то так ведб можно и без хэша, мэша, гэша обойтись??
Старый 22.05.2010, 01:51
ScorpioT1000
Работаем
offline
Опыт: отключен
тогда уж не строка а целое число с индексом нужной структуры.
переименовал тему :)

Отредактировано ScorpioT1001, 22.05.2010 в 03:49.
Старый 22.05.2010, 03:30
Ответ

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

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

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

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



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