|
22.07.2008, 01:51
|
#1
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
LUA and BMAX - проблема
Смотри, имеем:
Тип. Хороший такой тип, большой такой.
Type TypeMonster
Field script:TLuaScriptEngine
Method Update()
script.CallFunction("Update", True)
End Method
Function Create_Monster:TypeMonster ()
Local Monster:TypeMonster=New TypeMonster
Monster.script = LoadScript("1.lua")
End Function
End type
|
вот в чем проблема. имеем функцию, к примеру, такую:
Function Move(X:Float Var, y:Float Var, Speed:Float Var, Ang:Int Var)
X = X + (Speed * Cos(Ang))
Y = Y + (Speed * Sin(Ang))
End Function
|
Ее исспользую в типе монстра. Но надо как-то сделать так, чтобы через, допустим, команду в файле луа - MoveMonster() эта функция запускалась, но(!) ... Monster.script.addFunction(Move, "Move") не помогает. Ему не нравяться все "X:Float Var, y:Float Var, Speed:Float Var, Ang:Int Var" . Как правильно сделать, чтобы через файл луа запускалась эта функция? могу через жопу сделать, но не охото. Надо правильно.
еще проблема в том чтобы все данные из типа передавались в эту функцию.
|
(Offline)
|
|
22.07.2008, 01:53
|
#2
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: LUA and BMAX - проблема
Я вот как думаю. Можно сделать так - запускаем функцию, которая записывает в массив номера. а каждый номер соответствует функции.
То есть через луа, чтобы запустить функцию move, мы записываем в массив в ячейку 0 цифру 1. потом уже, пи обновленнии монстра смотри какие ячейки с 1, а какие нет. смотрим в ячейку 0 - опа! цифра 1, запускаем move. только так думаю. как по-другому я не знаю...
|
(Offline)
|
|
22.07.2008, 01:58
|
#3
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: LUA and BMAX - проблема
И как, допустим, возвратить жизни монстра в луа? Ведь там нужна функция, а чтобы обратиться из функции к определенному типу, нужно смотреть все объекты... это через жопу. а выносить все поля в переменные... тоже через жопу
|
(Offline)
|
|
22.07.2008, 02:06
|
#4
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: LUA and BMAX - проблема
Так переделал как я писал выше. Только за место функции Move сделал точно такой же метод. И сделал специально функцию , которая ничего не делает, кроме как при вызове ставит в массиве циферку 1. Вроде работает. Нормально. Но все равно хотелось бы услышать как правильно...
И как быть с возвращением значения поля из типа в луа?
|
(Offline)
|
|
22.07.2008, 02:17
|
#5
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: LUA and BMAX - проблема
Type TypeMonster
Field script:TLuaScriptEngine
Fiels X:int , Y:int, Speed:int, Ang:int
Method Update()
script.CallFunction("Update", True)
End Method
Method Move()
X = X + (Speed * Cos(Ang))
Y = Y + (Speed * Sin(Ang))
End Method
Function Create_Monster:TypeMonster ()
Local Monster:TypeMonster=New TypeMonster
Monster.script = LoadScript("1.lua")
End Function
End type
|
вот код примерный. как запустить Move из луа?
Последний раз редактировалось Данил, 22.07.2008 в 02:34.
|
(Offline)
|
|
22.07.2008, 10:39
|
#6
|
|
Ответ: LUA and BMAX - проблема
в LuaScript есть метод AddFunction
я делал так :
Function Lua_L%(LuaVM:Byte Ptr)
Local str1$ = Lua.GetStringParam(1) ;ето мои методы для получения принимающих параметров
Local str2$ = Lua.GetStringParam(2)
Test_Log(str1,str2)
Return 0
End Function
Lua.AddFunction(lua_L,"L")
и потом в Lua скрипте просто вызывал L("1","2")
я почему-то сильно не уверен что можно запустить метод типа из скрипта
исходник - http://jimon.org/downloads/mmorpg.rar
|
|
|
Сообщение было полезно следующим пользователям:
|
|
22.07.2008, 13:22
|
#7
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: LUA and BMAX - проблема
блин, как-то запускал метод из скрипта, не помню даже как. По началу по-моему флаг использовал из луа, типа такого
if(Lua.GetIntVar("doItbaby")) then self.method()
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:23.
|