Eigene Skriptengine - Fragen
Übersicht

![]() |
peacemakerBetreff: Eigene Skriptengine - Fragen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich bastele mir für mein Spiel tehadon (http://tehadon.gimyweb.de) eine kleine Skriptengine.
Die mache ich damit ich für die verschiedenen Objekte so etwas einprogrammiere wie z.B dass wenn man vor der Tür steht und mit der Maus klickt der Spieler sich nach vorne bewegt, also durch die Tür geht. Nun habe ich aber ein Problem: Code: [AUSKLAPPEN] pkt_objekt$ = Mid (zeilen$(gang),10,Len(pkt_objekt$)) In dieser Variable speichert sich bei jedem Durchgang eben dieses Wort Nur eben diese Objekte haben nicht alle den gleichlangen name, wie z.B mod_tür1, mod_schloss. Wie mache ich nun dass, es sieht wie lange der Name des jeweiligen Objektes ist? MfG |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Zitat: Wie mache ich nun dass, es sieht wie lange der Name des jeweiligen Objektes ist?
Das machst Du, indem Du ein Trennzeichen nimmst und die Position dieses Trennzeichens im String mit InStr() ermittelst. Je nach Konzept Deiner Skriptsprache könnte dies ein einfaches Leerzeichen, ein Komma, ein Trennstrich oder was auch immer sein - oder eine Kombination aus verschiedenen Symbolen bzw. verschiedenen Möglichkeiten. + Ava + |
||
![]() |
peacemaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tut mir Leid ich komme nicht ganz draus, was du da sagst.
![]() ![]() ![]() Hier ist mal der Code: Code: [AUSKLAPPEN] Dim zeilen$(200) For durchgaenge = 1 To 199 zeilen$(durchgaenge) = ReadLine (scriptdatei$) Next Global gang = 0 Repeat gang = gang + 1 If gang = 2 Then gang = 1 pkt_setzen$ = Mid (zeilen$(gang),1,8) pkt_objekt$ = Mid (zeilen$(gang),10,Len(pkt_objekt$)) If pkt_setzen$ = "SetPoint" Then Print pkt_objekt$ ; Nur zum schauen ;obs geht If KeyHit(1) Then Exit Flip Forever Hier ist noch das Skript: Code: [AUSKLAPPEN] PlayAni animation1 SetPoint mob_tür1 SetPoint mod_laby SetPoint mod_schl SetPoint wir_haus PlayAni animation2 SetTrailer trailer1 SetPoint mod_boot SetPoint mod_spiegel SetMyst raetsel1 SetPoint pfeilgbogen PlayAni animation2 SetPoint wir_door MfG |
||
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, du kopierst jeden Buchstaben einer Zeile bis du auf ein Trennzeichen stößt.
BSP: ichbackekuchen#undsoweiter Mid(), Instr() helfen dir weiter... Als Parameter von Mid() kannst du ja einstellen wieviele Zeichen das sein sollen. Mit Instr() ermittelst du, an welcher Stelle das Trennzeichen steht und bis dahin sollte er dann alle Zeichen kopieren. |
||
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mal einen kleinen Kommentierten Beispielcode geschrieben. Ich hoffe er ist hilfreich.
Code: [AUSKLAPPEN] Dim Script$(3)
Script$(0) = "CharakterAktion(Pinkeln)" Script$(1) = "ObjektBewegung(Tür, Schließen)" Script$(2) = "KartenBewegung(Rotation, 45°, Uhrzeigersinn)" Script$(3) = " Funktion ( 45 , 34 ) ; Hier zeigt sich, dass man auch leerzeichen lassen und kommentare setzen kann" For i = 0 To 3 ; Hier weisen wir der Variablen die aktuelle Zeile zu Zeile$ = Script$(i) ; Hier ermitteln wir, an welcher Position innerhalb der Zeile die öffnende Klammer steht PositionDerKlammer = Instr(Zeile$, "(") ; Dann nehmen wir mittels "Left" den ganzen Linken Teil bis zu Position der Klammer -1, ; da wir die Klammer selber nicht mehr haben wollen. ; Gleichzeitig entfernen wir vorne und hinten mittels "Trim" alle Leerzeichen ; damit auch so etwas " AktionMachen ( test ) " möglich ist und er den Befehl ; trotzdem als "AktionMachen" und nicht als " AktionMachen " erkennt. Befehl$ = Trim(Left(Zeile$, PositionDerKlammer-1)) ; Hier kürzen wir die Zeile, da wir den ersten Teil nicht mehr brauchen: ; Vorher: "ObjektBewegung(Tür, Schließen)", Nachher: "Tür, Schließen)" Zeile$ = Mid(Zeile$, PositionDerKlammer+1) Print "Befehl: " + Befehl$ ; Solange wir jetzt innerhalb der Zeile ein Komma entdecken, wiederholen wir die Schleife. ; Das ist wichtig für Befehle, die mehrere Parameter erwarten. ; Außerdem überprüfen wir, ob das Komma vor der schließenden Klammer steht, da wir sonst ein ; Komma in einem möglichen Kommentar mitnehmen While (Instr(Zeile$, ",") < Instr(Zeile$, ")")) And (Instr(Zeile$, ",") <> 0) ; Hier wird wieder eine Position ermittelt, diesmal die des Kommas. PositionDesKommas = Instr(Zeile$, ",") ; Wieder das selber wie oben bei dem Befehl. Wir nehmen alles von links bis zum Komma, ; ohne das Komma selber. Außerdem entfernen wir wieder alle Leerzeichen davor und dahinter. Parameter$ = Trim(Left(Zeile$, PositionDesKommas-1)) ; Und wieder wird die Zeile gekürzt, damit wir damit weiterarbeiten können. ; Vorher: "Tür, Schließen)", Nachher: " Schließen)" Zeile$ = Mid(Zeile$, PositionDesKommas+1) Print " Parameter: " + Parameter$ Wend ; Hier ermitteln wir die Position der schließenden Klammer. Wir gehen extra nicht einfach ; bis zum Ende der Zeile, sondern bis zu Klammer, damit soetwas wie Kommentare möglich sind. ; Beispiel: "Aktion(Charakter, Gehen, Links) ;Das lässt den Charakter nach links gehen" PositionDerZweitenKlammer = Instr(Zeile$, ")") ; Und wieder nehmen wir den letzten Parameter, mittels der Position der Klammer aus der Zeile ; raus und entfernen alle Leerzeichen davor und dahinter. Parameter$ = Trim(Left(Zeile$, PositionDerZweitenKlammer-1)) Print " Parameter: " + Parameter$ Next Input() |
||
![]() |
peacemaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mmh naja danke erst mal an beide.
Und wie sieht es dann bei dem Code aus den ich gemacht habe? MfG |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Dein Code schafft nichts. ![]() Schau Dir mal llieber ganz genau das schöne Beispiel von Artemis an. Der hat sich so viel Mühe gegeben. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group