Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 21.11.2012, 18:25   #1
Владислав
ПроЭктировщик
 
Аватар для Владислав
 
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений
(для 219 пользователей)
Вопрос Скрипты

Привет!
вот потихоньку разбираюсь со скриптами, возник вопрос, как использовать функции в коде игры из скрипта, т.е. из игры вызвать функцию в скрипте можно, а наоборот ?
Как я понял так сделать нельзя, тогда подскажите способы как из скрипта узнать координаты игрока, к примеру?
Вообще как это организовать, передавать насильно в скрипт координаты не вариант, т.к. скриптов много, и они должны быть одного типа.
(Offline)
 
Ответить с цитированием
Старый 22.11.2012, 00:43   #2
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 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
Черный крыс
 
Сообщений: n/a
Ответ: Скрипты

Наскок я знаю, все функции Ксорса забиндены разрабами, поэтому тебе в скрипте остается только их вызывать.

Скорее всего названия одноименные.
Примерно так : 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
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: Скрипты

Какой язык? В Си достаточно заюзать xRegisterFunction. В блице для этого нужно как-то получить адрес функции (через либу FastPointer, например), но вряд ли оно будет работать.
__________________

(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 11:24   #7
Черный крыс
 
Сообщений: n/a
Ответ: Скрипты

Как написал нерд, ее необходимо зарегестрировать в скриптовом движке.

Но в Блиц3Д такое не сделать, так как он не поддерживает указатели на функции.

ЗЫ Можно написать эту функцию в самом скрипте.
 
Ответить с цитированием
Старый 23.11.2012, 12:20   #8
Владислав
ПроЭктировщик
 
Аватар для Владислав
 
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений
(для 219 пользователей)
Ответ: Скрипты

Можно по-подробнее ?
(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 12:39   #9
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 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
Черный крыс
 
Сообщений: n/a
Ответ: Скрипты

Неполучится. В функции 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
Черный крыс
 
Сообщений: n/a
Ответ: Скрипты

У меня получилось зарегистрировать функцию, но из скрипта никак не хочет работать ...
Надеюсь сам понял что сказал?

Если она не хочет работать из скрипта, значит она не зарегестрировалась. Фейл при регистрации может быть только в одном случае : ты пытаешься скормить скрипту либо функцию с некорректным стандартом вызова либо какую-то ересь.

логично?

Последний раз редактировалось Черный крыс, 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
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: Скрипты

Сообщение от Владислав Посмотреть сообщение
Diablo1909, конечно понял, моя функция теперь подсвечивается как стандартная...
You doing it wrong.
Сообщение от Diablo1909 Посмотреть сообщение
Неполучится. В функции xRegisterFunction() нужно передавать функцию, которая вызывается по стандарту __stdcall.
Э! Если в блице не такие, то каким анальным колдунством в этой либе реализована мультипоточность?
__________________

(Offline)
 
Ответить с цитированием
Старый 24.11.2012, 13:08   #15
Черный крыс
 
Сообщений: n/a
Ответ: Скрипты

Э! Если в блице не такие, то каким анальным колдунством в этой либе реализована мультипоточность?
эта либа знает, что функции блица необходимо вызывають по стандарту __ccall.
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 17:01.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com