(Gelöst) Lua Methoden beibringen
Übersicht

![]() |
Horst der BiberBetreff: (Gelöst) Lua Methoden beibringen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich habe vor allgemeine Scripts für das Verhalten von z. B. Gegnern in meinem Spiel zu schreiben. Dazu habe ich jetzt jedem gescripteten Spielobjekt eine Scriptengine gegeben, die in jedem Durchlauf das Verhaltensscript ausführt. Jedoch benötige ich dazu Methoden, damit ich nicht in jedem Script angeben muss, welches Spielobjekt sich so verhalten soll. Code: [AUSKLAPPEN] Type TScriptedEntity Extends TEntity
Field ScriptEnv:TLuaScriptEngine = New TLuaScriptEngine Field Scripts:TMap = New TMap Field Sprite:TImage Field Frame:Int Method New() ScriptEnv.Reset() ScriptEnv.AddFunction(LuaSetPosition, "SetPosition") End Method Method AddScript(name:String, text:String) Scripts.Insert(name, TScript.Create(text)) End Method Method AddConditionForScript(script:String, condition:String, initstate:Byte) TScript(Scripts.ValueForKey(script)).AddCondition(condition, initstate) End Method Method Update() Local script:TScript For script = EachIn Scripts.Values() script.Run(ScriptEnv) Next End Method Method Render(scrollx:Float, scrolly:Float) 'If Sprite = Null Then Return 'DrawImage Sprite, Pos.X - scrollx, Pos.Y - scrolly, Frame SetColor 200, 80, 60 DrawRect Pos.X - scrollx, Pos.Y - scrolly, 32, 32 SetColor 255, 255, 255 End Method Method LuaSetPosition(luastate:Byte Ptr) Pos = TPoint.Create(ScriptEnv.CheckNumber(-2), ScriptEnv.CheckNumber(-1)) End Method End Type Daher meine Frage: Ist es irgendwie möglich Lua Methoden bei zu bringen? Oder kennt jemand eine andere Möglichkeit allgemeine Verhaltensscripts zu verwenden? |
||
- Zuletzt bearbeitet von Horst der Biber am So, Nov 25, 2007 15:12, insgesamt einmal bearbeitet
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Erm man gibt nicht jedem Objekt eine VM, dass ist dir bewusst oder?
Weil der sinn der VM ist es dass sie virtuelles Multithreading erlaubt, das geht nur wenn sie auch in einer VM sind. Normalerweise splittet man höchstens wirklich getrennte Dinge in verschiedene VMs wie AI und Worldhandling und dergleichen. Dinge die halt effektiv nicht "in einer welt sein müssen" Deine Frage ist allerdings leicht unpräzise gestellt. Was willst du genau machen? LUA Funktionen von BM aufrufen oder BM Funktionen von LUA aus aufrufen? Und nein, methoden kannst du glaub nicht aufrufen. Da musst du eine Funktion im Type schreiben die eine ID annimmt (die ID stellt einen Int Handle für die Objektinstanz dar) und auf dem Objekt mit dieser ID die entsprechende Methode aufruft. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Horst der Biber |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, ich habe mich wirklich unpräzise ausgedrückt. Ich wollte von Lua aus BlitzMax Methoden aufrufen.
Ich habe jetzt einen Umweg gefunden, indem ich nur noch eine "VM" verwende, der ich alle möglichen Funktionen wie SetPos, CreateEntity usw. beigebracht habe. Das mit den Methoden habe ich so gelöst, dass im Script statt der ID (bei mir ein String) des allgemeinen Objekts einfach "self" steht. Bevor jedes Script ausgeführt wird, wird der Name des Objekts gespeichert und wenn "self" im Script auftaucht, durch diesen Namen ersetzt. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group