forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   LUA and BMAX - проблема (http://forum.boolean.name/showthread.php?t=6148)

Данил 22.07.2008 01:51

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" . Как правильно сделать, чтобы через файл луа запускалась эта функция? могу через жопу сделать, но не охото. Надо правильно.


еще проблема в том чтобы все данные из типа передавались в эту функцию.
Цитата:

Move(X, Y, Speed, Ang)

Данил 22.07.2008 01:53

Ответ: LUA and BMAX - проблема
 
Я вот как думаю. Можно сделать так - запускаем функцию, которая записывает в массив номера. а каждый номер соответствует функции.
То есть через луа, чтобы запустить функцию move, мы записываем в массив в ячейку 0 цифру 1. потом уже, пи обновленнии монстра смотри какие ячейки с 1, а какие нет. смотрим в ячейку 0 - опа! цифра 1, запускаем move. только так думаю. как по-другому я не знаю...

Данил 22.07.2008 01:58

Ответ: LUA and BMAX - проблема
 
И как, допустим, возвратить жизни монстра в луа? Ведь там нужна функция, а чтобы обратиться из функции к определенному типу, нужно смотреть все объекты... это через жопу. а выносить все поля в переменные... тоже через жопу

Данил 22.07.2008 02:06

Ответ: LUA and BMAX - проблема
 
Так переделал как я писал выше. Только за место функции Move сделал точно такой же метод. И сделал специально функцию , которая ничего не делает, кроме как при вызове ставит в массиве циферку 1. Вроде работает. Нормально. Но все равно хотелось бы услышать как правильно...

И как быть с возвращением значения поля из типа в луа?

Данил 22.07.2008 02:17

Ответ: 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 из луа?

jimon 22.07.2008 10:39

Ответ: 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

dimanche13 22.07.2008 13:22

Ответ: LUA and BMAX - проблема
 
блин, как-то запускал метод из скрипта, не помню даже как. По началу по-моему флаг использовал из луа, типа такого
Код:

if(Lua.GetIntVar("doItbaby")) then self.method()


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot