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

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

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

offline
Опыт: 5,715
Активность:
[Handle] - могете поподробнее
САБЖ.
Расскажите плиз о принцыпе работы,методах и примерах использования.
скажем например вопрос:

там есть сет хэндл ф-ия, юзаем ее и присваиваем значение глобалки, изменится ли при изменнении глобалки значение, содержащееся в объекте?

DeT добавил:
Ну и в принцыпе о самих хэндлах...
статьи просто норм. не нашел
Старый 13.02.2007, 17:10
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
Цитата:
там есть сет хэндл ф-ия
- где ? первый раз о такой слышу :) есть функция "h2i" мож ты её имел ввиду ?

DeT handle это и есть тот же объект, только в цифровом формате т.е. всё что делается с хендлом напрямую связано с объектом, я бы даже сказал что хендл это более "главная единица" чем сам объект(юнит и т.д.) т.к. компьютер работает именно с "цифровыми" объектами!

Цитата:
Расскажите плиз о принцыпе работы,методах и примерах использования.
скажы точнее что тебя интересует т.к. статью здесь тебе врядли кто-то напишет :)
Старый 13.02.2007, 17:56
adic3x

offline
Опыт: 107,539
Активность:
Вообщето хендл это надтип т.е. каждый юнит хендл, но не каждый хендл юнит...
Старый 13.02.2007, 18:02
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
Цитата:
Вообщето хендл это надтип т.е. каждый юнит хендл, но не каждый хендл юнит...
дело не только в юнитах а вообще во всех объектах варкрафта т.е. с помощью хендла можно манипулировать любым объектом вара(которым можно манипулировать).
Старый 13.02.2007, 18:38
NETRAT

offline
Опыт: 83,762
Активность:
Handle - это дескриптор, всегда и везде.
В варкрафте дескриптор означает ссылку на обьект, значение дескриптора - порядковый номер обьекта в встроенном менеджере памяти. Дескриптор представляет собой целое 4 байтовое число. Что с ним можно делать - свободно передавать ссылку на обьект в другую функцию, вместо того что бы передавать сам обьект. Фактически, принцип действия равносилен ссылкам или указателям в других языках программирования. Без знания жасса использование дескрипторов существенно затруднено.

NETRAT добавил:
Следует так же помнить, что все локальные обьекты (обявленные как local и не использующие конструкторы типа CreateXXX()) существуют локально внутри функции, поэтому ссылки на них очень быстро становятся ссылками на несуществующий обьект. А вот глобальные обьекты или сконструированные методом CreateXXX() обьекты существуют до тех пор пока для них не вызван деструктор или все время выполнения скрипта. Здесь наиболее часто используемыются дескрипторы для передачи ссылки на конструируемый обьект (CreateXXX()) из одной функции в другую - такая передача единственно возможна через механизм ссылок.
Так же стоит подчеркнуть что ссылка не имеет типа, то есть при ее использовании всегда нужно точно знать какой тип обьекта соответствует ссылке.

NETRAT добавил:
Основной принципы
1. Любая ссылка может приобретать любой тип, то есть может быть присвоена обьекту любого типа (но, естественно, полученный обьект будет работать только в том случае если тип сответствует реальному типу)
2. На любой обьект можно получить ссылку
Старый 13.02.2007, 19:01
DeT

offline
Опыт: 5,715
Активность:
NETRAT,санкс.
Тада такое интересное предположение:
call SetHandleReal(<тип объекта>, "<строковый параметр>", <значение>)
позволяетсоздать некое пародие классов скажем в о.паскале?
Старый 13.02.2007, 22:18
DioD

offline
Опыт: 45,184
Активность:
это называется база данных где номер объекта есть таблица строка есть лэйбл а данные под лэйблом имеют формат числа с плавающей точкой
Старый 14.02.2007, 03:19
DeT

offline
Опыт: 5,715
Активность:
рррр
я вопрс вроде как задал :):
Старый 14.02.2007, 15:21
DioD

offline
Опыт: 45,184
Активность:
Код:
constant function H2Ix takes handle H returns integer
    return H
    return 0
endfunction
//End Constants

//Return Bug
function H2Tx takes handle H returns string
    return I2S(H2Ix(H))
endfunction
Создаёт "таблицу" которую можно использовать для записей
function I2TAx takes integer I returns triggeraction
    return I
    return null
endfunction
function I2TRx takes integer I returns trigger
    return I
    return null
endfunction
function I2Tx takes integer I returns timer
    return I
    return null
endfunction
function I2Lx takes integer I returns lightning
    return I
    return null
endfunction
function I2TDx takes integer I returns timerdialog
    return I
    return null
endfunction
function I2Gx takes integer I returns group
    return I
    return null
endfunction
function I2Ux takes integer I returns unit
    return I
    return null
endfunction
//End Return Bug

//Core
function CoreDrop takes nothing returns nothing
    if udg_Core != null then
        call FlushGameCache(udg_Core)
        set udg_Core = null
    endif
endfunction
function CoreInit takes nothing returns nothing
    call FlushGameCache(InitGameCache(CoreName()))
    set  udg_Core    =  InitGameCache(CoreName())
endfunction
function Core takes nothing returns gamecache
    if udg_Core != null then
        return udg_Core
    endif
    call CoreInit()
    return udg_Core
endfunction
Функции что оперируют кешем, сделано чисто для удобства, гораздо правильнее запускать кеш один раз и потом не убивать.
Сделано из за реаллока что сбрасывает все переменные на исзначальные величины

function SetCore takes string Table, string Key, integer Data returns nothing
    call StoreInteger(Core(),Table,Key,Data)
endfunction
function GetCore takes string Table, string Key returns integer
    return GetStoredInteger(Core(),Table,Key)
endfunction
function DropCore takes string Table returns nothing
    call FlushStoredMission(Core(),Table)
endfunction
function DropCoreSingle takes string Table, string Key returns nothing
    call FlushStoredInteger(Core(),Table,Key)
endfunction
Функции что юзают строки полученые через H2Tx хэндлы должны быть записаны через H2Ix(Handle)


Это юзаю я сам, ничего гениального, просто РБ с чуточкой кастюмизации.

как говориться сделано ради удобства онли, где то валялся СДАРС, так вот в узких местах следует юзать его.
Старый 14.02.2007, 15:47
DeT

offline
Опыт: 5,715
Активность:
С етим все понятно...
гратц, все понятно
кроме ф-ии CoreName()
у мну е нету в JSP(думаю нада новую версию скачать)
у мну вапрос был не про ето(второй):
Мы могем расширить границы класс unit привив ему небольшую системку работы скажем с прараметрами...
блин..я тупо наверно выражаюсь :):
Старый 14.02.2007, 16:30
DioD

offline
Опыт: 45,184
Активность:
каждому юниту через сэт ко прилепливай что надо
CoreName() возращает строку с именем кеша, это для удобного импорта
функция вида ничего не берёт возращает строку
Старый 14.02.2007, 16:42
DeT

offline
Опыт: 5,715
Активность:
DioD
вот такой код будет работать?

set udg_I='<value>'
SetHandleInt(udg_Unit,"type",udg_I)
set udg_I='<new value>'

причем <new value> != <value>

что будет у юнита в "type" ??
Старый 14.02.2007, 17:07
NETRAT

offline
Опыт: 83,762
Активность:
DeT а что делает функция SetHandleInt???
то и будет что присвоишь
Старый 14.02.2007, 18:32
DeT

offline
Опыт: 5,715
Активность:
Все равно...там мона многочего наворотить...се...топик мона зыкрвать, всем спасибо
Старый 14.02.2007, 18:37
Закрытая тема

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

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

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

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



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