|
Xors3D Графический движок с поддержкой DirectX9 |
21.11.2012, 18:25
|
#1
|
ПроЭктировщик
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений (для 219 пользователей)
|
Скрипты
Привет!
вот потихоньку разбираюсь со скриптами, возник вопрос, как использовать функции в коде игры из скрипта, т.е. из игры вызвать функцию в скрипте можно, а наоборот ?
Как я понял так сделать нельзя, тогда подскажите способы как из скрипта узнать координаты игрока, к примеру?
Вообще как это организовать, передавать насильно в скрипт координаты не вариант, т.к. скриптов много, и они должны быть одного типа.
|
(Offline)
|
|
22.11.2012, 00:43
|
#2
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Скрипты
Скрипт по сути текстовый файл и когда его (скрипт) надо задействовать, то считывай файл, парси и тд. А так же функции скриптов должны быть прописаны в самой игре. По сути это тот же код.
|
(Offline)
|
|
22.11.2012, 10:36
|
#3
|
ПроЭктировщик
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений (для 219 пользователей)
|
Ответ: Скрипты
так вот как мне эти функции использовать из скрипта ?
|
(Offline)
|
|
22.11.2012, 15:55
|
#4
|
|
Ответ: Скрипты
Наскок я знаю, все функции Ксорса забиндены разрабами, поэтому тебе в скрипте остается только их вызывать.
Скорее всего названия одноименные.
Примерно так : x = xEntityX(entity);
|
|
|
22.11.2012, 20:49
|
#5
|
ПроЭктировщик
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений (для 219 пользователей)
|
Ответ: Скрипты
Я наверное непонятно объяснил...
например, написал я функцию в основном коде
LoadMap(map)
map = loadmesh(level1.b3d)
end function
как вызвать эту функцию из скрипта ?
|
(Offline)
|
|
22.11.2012, 23:12
|
#6
|
Чудо-кот
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений (для 1,471 пользователей)
|
Ответ: Скрипты
Какой язык? В Си достаточно заюзать xRegisterFunction. В блице для этого нужно как-то получить адрес функции (через либу FastPointer, например), но вряд ли оно будет работать.
|
(Offline)
|
|
23.11.2012, 11:24
|
#7
|
|
Ответ: Скрипты
Как написал нерд, ее необходимо зарегестрировать в скриптовом движке.
Но в Блиц3Д такое не сделать, так как он не поддерживает указатели на функции.
ЗЫ Можно написать эту функцию в самом скрипте.
|
|
|
23.11.2012, 12:20
|
#8
|
ПроЭктировщик
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений (для 219 пользователей)
|
Ответ: Скрипты
Можно по-подробнее ?
|
(Offline)
|
|
23.11.2012, 12:39
|
#9
|
Чудо-кот
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений (для 1,471 пользователей)
|
Ответ: Скрипты
Суть такова:
- Ставишь вот это - http://fastlibs.com/download.php?id=...inter_1_00.zip
- Смотришь в примере Example_FunctionPointer.bb как получить указатель на функцию (там делаются дикие махинации над goto, так что лучше сделай только одну функцию-обработчик, а все остальные имплементируй внутри скрипта)
- Пробуешь заюзать xRegisterFunction, указав в первом аргументе строкой название функции и аргументы (например: "LoadMap(map)"), а во втором - указатель на функцию
Самому интересен результат.
|
(Offline)
|
|
23.11.2012, 17:43
|
#10
|
|
Ответ: Скрипты
Неполучится. В функции xRegisterFunction() нужно передавать функцию, которая вызывается по стандарту __stdcall.
Что подробнее? Как написать функцию?
Ну примерно так :
void LoadMap(int &map)
{
map = xLoadMesh("level1.b3d");
};
|
|
|
23.11.2012, 21:14
|
#11
|
ПроЭктировщик
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений (для 219 пользователей)
|
Ответ: Скрипты
Сообщение от Diablo1909
Неполучится. В функции xRegisterFunction() нужно передавать функцию, которая вызывается по стандарту __stdcall.
Что подробнее? Как написать функцию?
Ну примерно так :
void LoadMap(int &map)
{
map = xLoadMesh("level1.b3d");
};
|
Ну епрст, я что настолько непонятно изъясняюсь ?
У меня получилось зарегистрировать функцию, но из скрипта никак не хочет работать ...
|
(Offline)
|
|
23.11.2012, 22:14
|
#12
|
|
Ответ: Скрипты
У меня получилось зарегистрировать функцию, но из скрипта никак не хочет работать ...
|
Надеюсь сам понял что сказал?
Если она не хочет работать из скрипта, значит она не зарегестрировалась. Фейл при регистрации может быть только в одном случае : ты пытаешься скормить скрипту либо функцию с некорректным стандартом вызова либо какую-то ересь.
логично?
Последний раз редактировалось Черный крыс, 24.11.2012 в 00:35.
|
|
|
24.11.2012, 10:42
|
#13
|
ПроЭктировщик
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений (для 219 пользователей)
|
Ответ: Скрипты
Diablo1909, конечно понял, моя функция теперь подсвечивается как стандартная...
|
(Offline)
|
|
24.11.2012, 11:50
|
#14
|
Чудо-кот
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений (для 1,471 пользователей)
|
Ответ: Скрипты
Сообщение от Владислав
Diablo1909, конечно понял, моя функция теперь подсвечивается как стандартная...
|
You doing it wrong.
Сообщение от Diablo1909
Неполучится. В функции xRegisterFunction() нужно передавать функцию, которая вызывается по стандарту __stdcall.
|
Э! Если в блице не такие, то каким анальным колдунством в этой либе реализована мультипоточность?
|
(Offline)
|
|
24.11.2012, 13:08
|
#15
|
|
Ответ: Скрипты
Э! Если в блице не такие, то каким анальным колдунством в этой либе реализована мультипоточность?
|
эта либа знает, что функции блица необходимо вызывають по стандарту __ccall.
|
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:09.
|