Unterschiedliche Tastenabfrage
Mir ist aufgefallen, dass die Taste ständig getriggert wird, wenn man sie gedrückt hält.
Ich hätte jedoch gerne noch weitere Möglichkeiten.
1. So soll ein Branch nur in dem Augenblick getriggert werden, in dem ich die Taste drücke. Selbst wenn ich sie weiterhin gedrückt halten sollte, sollte der Trigger nicht mehr reagieren sondern erst dann, wenn ich die Taste loslasse und anschließend nochmal drücke.
2. Eine weitere Triggerart wäre, dass ein Zähler läuft während ich eine Taste gedrückt halte. Getriggert wird erst beim loslassen der Taste. Anschließend sollte der Wert der sich während dem drücken "gesammelt" hat irgendwo abgespeichert werden um in weiter verwenden zu können.
Ist die zweite Triggerart zu komplex würde ich mich auch schon darüber freuen, wenn beim loslassen getriggert wird. Also nicht beim drücken einer Taste, sondern wenn man sie wieder loslässt.
Vielleicht gibt es sowas auch schon, aber ich habe es nicht gefunden. Quick time events, kann ich schon vorwegnehmen, entspricht nicht meinen Vorstellungen (auch wenn das Script selbst sehr schick ist).
Danke schonmal im vorraus.
Ich hätte jedoch gerne noch weitere Möglichkeiten.
1. So soll ein Branch nur in dem Augenblick getriggert werden, in dem ich die Taste drücke. Selbst wenn ich sie weiterhin gedrückt halten sollte, sollte der Trigger nicht mehr reagieren sondern erst dann, wenn ich die Taste loslasse und anschließend nochmal drücke.
2. Eine weitere Triggerart wäre, dass ein Zähler läuft während ich eine Taste gedrückt halte. Getriggert wird erst beim loslassen der Taste. Anschließend sollte der Wert der sich während dem drücken "gesammelt" hat irgendwo abgespeichert werden um in weiter verwenden zu können.
Ist die zweite Triggerart zu komplex würde ich mich auch schon darüber freuen, wenn beim loslassen getriggert wird. Also nicht beim drücken einer Taste, sondern wenn man sie wieder loslässt.
Vielleicht gibt es sowas auch schon, aber ich habe es nicht gefunden. Quick time events, kann ich schon vorwegnehmen, entspricht nicht meinen Vorstellungen (auch wenn das Script selbst sehr schick ist).
Danke schonmal im vorraus.
Könnte mir jemand helfen?
Letztendlich bräuchte ich nur ein Script das nur in dem Augenblick (mit paar ms toleranz) true zurück gibt in dem eine Taste gedrückt wird und ein weiteres das true zurück gibt wenn die Taste losgelassen wird.
Für Ideen oder Denkanstoße zum selber lösen bin ich auch dankbar.
Letztendlich bräuchte ich nur ein Script das nur in dem Augenblick (mit paar ms toleranz) true zurück gibt in dem eine Taste gedrückt wird und ein weiteres das true zurück gibt wenn die Taste losgelassen wird.
Für Ideen oder Denkanstoße zum selber lösen bin ich auch dankbar.
Also ob die Taste gedrückt wird,fragst du bestimmt über ein Paralell Event ab.
Zu 1:
Also du müsstest an einigen Stellen ein paar Wait Befehle einbauen das der Code nicht zu schnell neu abgefragt wird.
Das geht über Set Mouve Route Befehl bei dem Eventcode,einfach Event auswählen und Wait einstellen.
Oder wenn der Branch Triggert das dann das Event auf die 2te Eventseite springt und dann nen Branch das die Seite sich erst
wieder auf die Erste wechselt wenn die Taste nicht gedrückt ist.
Zu 2:
Paralel Event mit nem Branch der bewirkt
das bei Tastendruck eine Variable nennen wir sie Powerleiste um +1oder mehr hochgezählt wird
(wenn man will noch nen wait befehl damits nicht so schnell hochgezählt wird).
Dann nen branch dahinter ob die taste immer noch gedrückt ist
wenn ja
lässt man nichts pasieren und der zählvorgang wiederholt sich einfach immer weiter und die powerleisten variable nimmt zu.
wenn nein
in den Else Case des branches von eben ein paar weitere conditional branches machen
welche denn wert der powerleisten variable abfragen, z.b. passiert 0-200 nichts, bei 201-600 passiert ??? , bei 601-99999999 passiert???
Ich weiss ja nicht was du genau vor hast das müsste man entsprechend individuell feinabstimmen.
hoffe das hilft
Zu 1:
Also du müsstest an einigen Stellen ein paar Wait Befehle einbauen das der Code nicht zu schnell neu abgefragt wird.
Das geht über Set Mouve Route Befehl bei dem Eventcode,einfach Event auswählen und Wait einstellen.
Oder wenn der Branch Triggert das dann das Event auf die 2te Eventseite springt und dann nen Branch das die Seite sich erst
wieder auf die Erste wechselt wenn die Taste nicht gedrückt ist.
Zu 2:
Paralel Event mit nem Branch der bewirkt
das bei Tastendruck eine Variable nennen wir sie Powerleiste um +1oder mehr hochgezählt wird
(wenn man will noch nen wait befehl damits nicht so schnell hochgezählt wird).
Dann nen branch dahinter ob die taste immer noch gedrückt ist
wenn ja
lässt man nichts pasieren und der zählvorgang wiederholt sich einfach immer weiter und die powerleisten variable nimmt zu.
wenn nein
in den Else Case des branches von eben ein paar weitere conditional branches machen
welche denn wert der powerleisten variable abfragen, z.b. passiert 0-200 nichts, bei 201-600 passiert ??? , bei 601-99999999 passiert???
Ich weiss ja nicht was du genau vor hast das müsste man entsprechend individuell feinabstimmen.
hoffe das hilft
Kannst ja einen kurzen Auszug aus meinem Script haben, dass habe ich eigentlich für eine kleine Tasteneingabe implementiert.
Hier wird bei Key.get_state(id) immer dann true returnt, wenn die Taste gedrückt ist. Bei Key.get_triggered(id) wird zuerst true returnt, dann für ein paar ms (von den Windowseinstellungen) immer false, dann wieder true usw.
Das ist dann ungefähr so wie wenn du hier ganz lange aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa gedrückt hältst.
Ist halt wie gesagt eher für eine Texteingabe geeignet, aber vielleicht hilft's ja.
Und ich hänge dir mal noch ein kleines Projekt an, mit dem du abfragen kannst welche Taste welchen Wert hat:
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
module Key GetAsyncKeyState = Win32API.new('user32.dll', 'GetAsyncKeyState', 'i', 'i') Keybd_event = Win32API.new('user32.dll', 'keybd_event','llll', '') GetKeyState = Win32API.new('user32.dll', 'GetKeyState', 'i', 'i') def Key.get_triggered(id) if GetAsyncKeyState.call(id) != 0 setkey_up(id) return true else return false end end def Key.get_state(id) return !GetKeyState.call(id).between?(0, 1) end def Key.setkey_up(id) Keybd_event.call(id, 0, 2, 0) end end |
Hier wird bei Key.get_state(id) immer dann true returnt, wenn die Taste gedrückt ist. Bei Key.get_triggered(id) wird zuerst true returnt, dann für ein paar ms (von den Windowseinstellungen) immer false, dann wieder true usw.
Das ist dann ungefähr so wie wenn du hier ganz lange aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa gedrückt hältst.
Ist halt wie gesagt eher für eine Texteingabe geeignet, aber vielleicht hilft's ja.
Und ich hänge dir mal noch ein kleines Projekt an, mit dem du abfragen kannst welche Taste welchen Wert hat:
Mehr als a Allgäuer ka a Mensch it wera.
Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren
Erstmal danke an beide.
@ Bex
Zu 1: So wird es leider nicht gehen. Mit einem Wait lähme ich die Funktion, was ich nicht will. Ein Beispiel:
Mit a schießt man einen Feuerball. Ich will aber nicht, dass man einfach a gedrückt hält und ein Feuerballgespawnt wird. Der nächste Feuerball soll erst dann abgefeuert werden wenn die Taste erneut gedrückt wird. Würde ich wait einbauen würde zwar der Feuerball nicht gespawnt werden, aber der Spieler könnte ihn auch nicht schnell hintereinander feuern.
Zu 2: Ich habe es noch nicht ausprobiert, aber diese Lösung scheint gut zu sein. Dennoch hätte ich genau diese Rechnung in einem Script, da ansonsten die Events sehr umständlich und unübersichtlich werden würden.
@Hindi
Das sieht interessant aus (auch wenn ich durch das Script nicht durchblicke...
). Könnte man bei Key.get_triggered(id) es so einstellen, dass er immer nach true false zurückgibt? (bis halt die Taste erneut gedrückt wird)
Im Anhang fand ich leider nur ein leeres Projekt. Konnte also nicht die ID´s damit ermitteln.
Wo steht eigentlich im RGSS des Makers die Tasterturabfrage? Ich finde da zwar sowas wie "Input.trigger", aber wo es definiert ist nicht.
@ Bex
Zu 1: So wird es leider nicht gehen. Mit einem Wait lähme ich die Funktion, was ich nicht will. Ein Beispiel:
Mit a schießt man einen Feuerball. Ich will aber nicht, dass man einfach a gedrückt hält und ein Feuerballgespawnt wird. Der nächste Feuerball soll erst dann abgefeuert werden wenn die Taste erneut gedrückt wird. Würde ich wait einbauen würde zwar der Feuerball nicht gespawnt werden, aber der Spieler könnte ihn auch nicht schnell hintereinander feuern.
Zu 2: Ich habe es noch nicht ausprobiert, aber diese Lösung scheint gut zu sein. Dennoch hätte ich genau diese Rechnung in einem Script, da ansonsten die Events sehr umständlich und unübersichtlich werden würden.
@Hindi
Das sieht interessant aus (auch wenn ich durch das Script nicht durchblicke...
). Könnte man bei Key.get_triggered(id) es so einstellen, dass er immer nach true false zurückgibt? (bis halt die Taste erneut gedrückt wird)Im Anhang fand ich leider nur ein leeres Projekt. Konnte also nicht die ID´s damit ermitteln.
Wo steht eigentlich im RGSS des Makers die Tasterturabfrage? Ich finde da zwar sowas wie "Input.trigger", aber wo es definiert ist nicht.
Hab den Download mal nochmal ausprobiert... Bei mir sind die Daten alle da...
Und ja könnte man^^, nur das ist dann eben von Winapi nicht vorgegeben oder ich kenne da zumindest keine Methode bzw. Funktion und deshalb müsste man da ne update-Methode erstellen, was ein bisl Performance nimmt.
So z.B.:
Geupdated wird es mit Input.update(), also in nem Event (mit Call Script oder Conditional Branch) eigetnlich automatisch, da wirst du es gar nicht brauchen und ist auch nicht ratsam Input.update() aus einem Event aufzurufen, außer du hast nen Grund.
Abfragen, ob in der letzten Frame eine Taste losgelassen wurde kannst du mit:
Und ob eine Taste gerade gedrückt wird mit:
Returnt nur einmal true dann immer false, bis die Taste ein wiederholtes Mal gedrückt wird:
Die Methoden returnen je nach dem halt dann true oder false.
ID ist dann die Zahl, die bei dem Projekt, was ich in meiner letzten Post geuploaded habe ausgegeben wird, wenn du eine Taste drückst. Für alles ein Bsp.:
mfg
Und ja könnte man^^, nur das ist dann eben von Winapi nicht vorgegeben oder ich kenne da zumindest keine Methode bzw. Funktion und deshalb müsste man da ne update-Methode erstellen, was ein bisl Performance nimmt.
So z.B.:
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
module Key GetKeyState = Win32API.new('user32.dll', 'GetKeyState', 'i', 'i') GetKeyboardState = Win32API.new('User32.dll', 'GetKeyboardState', 'p', 'i') PRESSED_KEYS = "0" * 256 GetKeyboardState.call(PRESSED_KEYS) @last_pressed = PRESSED_KEYS.clone() TRIGGERED_KEYS = [] def Key.update() TRIGGERED_KEYS.clear() 0x00.upto(0xff) {|i| TRIGGERED_KEYS.push(i) if !Key.get_real_state(i) && Key.get_state(i) } @last_pressed = PRESSED_KEYS.clone() GetKeyboardState.call(PRESSED_KEYS) end def Key.get_state(id) return !PRESSED_KEYS[id].between?(0, 1) end def Key.get_released(id) return TRIGGERED_KEYS.include?(id) end def Key.get_triggered(id) return Key.get_state(id) && @last_pressed[id].between?(0, 1) end def Key.get_real_state(id) return !GetKeyState.call(id).between?(0, 1) end end module Input class << self alias old_Key_Update_25042011 update end def self.update() Key.update() old_Key_Update_25042011() end end |
Geupdated wird es mit Input.update(), also in nem Event (mit Call Script oder Conditional Branch) eigetnlich automatisch, da wirst du es gar nicht brauchen und ist auch nicht ratsam Input.update() aus einem Event aufzurufen, außer du hast nen Grund.
Abfragen, ob in der letzten Frame eine Taste losgelassen wurde kannst du mit:
|
|
Ruby Quellcode |
1 |
Key.get_released(id) |
Und ob eine Taste gerade gedrückt wird mit:
|
|
Ruby Quellcode |
1 |
Key.get_state(id) |
Returnt nur einmal true dann immer false, bis die Taste ein wiederholtes Mal gedrückt wird:
|
|
Ruby Quellcode |
1 |
Key.get_triggered(id) |
Die Methoden returnen je nach dem halt dann true oder false.
ID ist dann die Zahl, die bei dem Projekt, was ich in meiner letzten Post geuploaded habe ausgegeben wird, wenn du eine Taste drückst. Für alles ein Bsp.:
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 |
if Key.get_released(0x41) p "a wurde losgelassen" elsif Key.get_state(0x41) p "a wird gedrückt" elsif Key.get_triggered(0x41) p "a wurde gedrückt" end |
mfg
Mehr als a Allgäuer ka a Mensch it wera.
Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Reborn« (27. April 2011, 17:59)
Cool. Es funktioniert. Doch eins bleibt.
Ich will das Script, fast das ganze Spiel hindurch, als Parallel-Event laufen lassen (ohne wait, da ansonsten die Tastenabfrage ja nicht korrekt arbeitet...). Da kommen mir natürlich Bedenken, wenn es performencenlastig ist oder wie meintest du es? Wie wird es sich auswirken?
Sollte ich vielleicht doch wait in das Parallel-Event einbauen (dann sollte aber das Script die letzten zwei Frames abfragen...)?
Soweit jedoch ein dickes Danke. Das Script gefällt bis jetzt sehr gut!
Achja, das mit dem Anhang passt. Ich hatte es bloß nicht gecheckt, dass das schwarze Feld schon das Programm war.
Ich will das Script, fast das ganze Spiel hindurch, als Parallel-Event laufen lassen (ohne wait, da ansonsten die Tastenabfrage ja nicht korrekt arbeitet...). Da kommen mir natürlich Bedenken, wenn es performencenlastig ist oder wie meintest du es? Wie wird es sich auswirken?
Sollte ich vielleicht doch wait in das Parallel-Event einbauen (dann sollte aber das Script die letzten zwei Frames abfragen...)?
Soweit jedoch ein dickes Danke. Das Script gefällt bis jetzt sehr gut!
Achja, das mit dem Anhang passt. Ich hatte es bloß nicht gecheckt, dass das schwarze Feld schon das Programm war.
So extrem ist das mit der Performance dann auch wieder nicht^^
Mehr als a Allgäuer ka a Mensch it wera.
Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Reborn« (28. April 2011, 17:49)
Uff also zu 1 von oben.
Wenn du ganz oft deine Taste drückst damit mehrere Feuerbälle erscheinen hast du das Problem das jeder Feuerball einzeln
eine Trefferabfrage brauch.Mit Events wird das dann kompliziert und wegen Performancegründen hab ich das auf eine Atacke zurzeit
verkleinert.Da ich momentan keine Zeit zum Makern hab konnte ich noch nicht weiter erforschen ob ich gut funktionierende Eventing Code Möglichkeiten übersehen hab.
Wenn du ganz oft deine Taste drückst damit mehrere Feuerbälle erscheinen hast du das Problem das jeder Feuerball einzeln
eine Trefferabfrage brauch.Mit Events wird das dann kompliziert und wegen Performancegründen hab ich das auf eine Atacke zurzeit
verkleinert.Da ich momentan keine Zeit zum Makern hab konnte ich noch nicht weiter erforschen ob ich gut funktionierende Eventing Code Möglichkeiten übersehen hab.
Aus diesem Grund habe ich mir überlegt beim jeden laden der Map die potenzielle Ziele abzuspeichern, damit bei der Abfrage der Collision nicht alle Events auf der Map berücksichtigt werden müssen. Der Rest würde über die normale passable-Abfrage laufen.
Wie effektiv das ist weiß ich nicht, aber wir werden es sehen.
Edit: Ich weiß nicht ob wir uns falsch verstanden haben, aber bei wird es auch eine kurze Pause geben zwischen den Feuerbällen...
Wie effektiv das ist weiß ich nicht, aber wir werden es sehen.
Edit: Ich weiß nicht ob wir uns falsch verstanden haben, aber bei wird es auch eine kurze Pause geben zwischen den Feuerbällen...
Was ist eine Passable Abfrage und wie funktioniert diese?
Alle Events als Treffer zu benutzen meinte ich auch nicht nur die Zielevents benutze ich,
das sind circa 10 bis 15 Zielevents je map, bei mehreren sollte man Gegner recyclen wenn sie gestorben sind.
Hab ich nun aber bis zu drei Feuerbälle die ich mit kleinerPause abfeuern kann müsste ich also drei mal soviel berechnen
was bei 10 Gegnern durch aus zu laggs kommt.
Vieleicht gibt es da eine gute Methode unnötige abfragen zu vermeiden und einen Eventcodeblock zu erschaffen der dies ermöglicht.
Ich konnte damals z.B gleichzeitig schlagen während noch ein Feuerball am rumfliegen ist.Habe dies aber aus Performancegründen auf Eis gelegt
so das man nur eine Helden Attacke im selben Augenblick ausführen kann.
Falls du da eine gute Lösung findest wär ich an der Lösung interessiert.
Edit: Informationen über den Ablauf deines AKS bis ins kleinste Detail machen es erst möglich gezielte Hilfestellung zu leisten.
Es gibt soviele möglichkeiten wie man da den Eventcode gestalten kann und eine änderung im nachhinein kommt manchmal
einem kompletten neubau des ganzen sehr nahe.Falls du paar Tips zum AKS brauchst helf ich gern weiter wobei ich
nur 2verschiedene angefangen hab, danke nochmal an die Hilfe der Comunity.
Hier ein AKS das ich für jemand aus der Com angefangen hatte, ist aber nicht ganz fertig.
Wie mache ich dieses einfache Kampfsystem? - Skript-Anfragen - RPG Studio - Make your World real
Hier nochmal ein Link zu meinem AKS, die demo ist alt der Eventcode wurd schon um fast 70% verkleinert aber vieleicht mal ganz nett um nen einblick zu bekommen.
VX Event AKS Entwicklung - Events & Technik - RPG Studio - Make your World real
Edit2: Der Waitbefehl kommt nicht unter die Abfrage ob eine Taste gedrückt wurde sondern in den Code wenn die Taste gedrückt wurde,das dann 20frames gewartet wird ehe
es wieder ununterbrochen zur normalen tastenabfrage kommt.
Alle Events als Treffer zu benutzen meinte ich auch nicht nur die Zielevents benutze ich,
das sind circa 10 bis 15 Zielevents je map, bei mehreren sollte man Gegner recyclen wenn sie gestorben sind.
Hab ich nun aber bis zu drei Feuerbälle die ich mit kleinerPause abfeuern kann müsste ich also drei mal soviel berechnen
was bei 10 Gegnern durch aus zu laggs kommt.
Vieleicht gibt es da eine gute Methode unnötige abfragen zu vermeiden und einen Eventcodeblock zu erschaffen der dies ermöglicht.
Ich konnte damals z.B gleichzeitig schlagen während noch ein Feuerball am rumfliegen ist.Habe dies aber aus Performancegründen auf Eis gelegt
so das man nur eine Helden Attacke im selben Augenblick ausführen kann.
Falls du da eine gute Lösung findest wär ich an der Lösung interessiert.
Edit: Informationen über den Ablauf deines AKS bis ins kleinste Detail machen es erst möglich gezielte Hilfestellung zu leisten.
Es gibt soviele möglichkeiten wie man da den Eventcode gestalten kann und eine änderung im nachhinein kommt manchmal
einem kompletten neubau des ganzen sehr nahe.Falls du paar Tips zum AKS brauchst helf ich gern weiter wobei ich
nur 2verschiedene angefangen hab, danke nochmal an die Hilfe der Comunity.
Hier ein AKS das ich für jemand aus der Com angefangen hatte, ist aber nicht ganz fertig.
Wie mache ich dieses einfache Kampfsystem? - Skript-Anfragen - RPG Studio - Make your World real
Hier nochmal ein Link zu meinem AKS, die demo ist alt der Eventcode wurd schon um fast 70% verkleinert aber vieleicht mal ganz nett um nen einblick zu bekommen.
VX Event AKS Entwicklung - Events & Technik - RPG Studio - Make your World real
Edit2: Der Waitbefehl kommt nicht unter die Abfrage ob eine Taste gedrückt wurde sondern in den Code wenn die Taste gedrückt wurde,das dann 20frames gewartet wird ehe
es wieder ununterbrochen zur normalen tastenabfrage kommt.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Bex« (29. April 2011, 18:57)
Danke für die Links, doch ich besitze kein VX und kann sie daher nicht öffnen.
Ich hatte sogar die Idee die Feuerbälle erst dann die Kollision abfragen zu lassen, wenn sie vor etwas nicht passierbares stoßen. Das wäre sehr Resourcen freundlich und man könnte sicherlich 10 Feuerbälle bei 10 Gegner auf einer Map verwenden. Doch mir gefiel die Ungenauigkeit der Kollision hierbei nicht, daher habe ich diese Idee verworfen.
Ob mein KS 3 Feuerbälle bei 15 Gegner laggfrei verarbeiten kann, kann ich dir noch nicht sagen. Doch da mein Spiel eher darauf zielt Labyrinthe und Rätsel im Stille von Zelda als Schwerpunkt zu haben und der Kampf eher eine Nebenbeschäftigung ist, hat das KS auch nicht den Anspruch enorm komplex zu werden.
Wenn ich eine Lösung finde kann ich sie dir gerne mitteilen. Jedoch arbeite ich soviel meine Kenntnisse mir reichen im Script, um grade die erwähnten Lags zu vermeiden. Daher werde ich dir wahrscheinlich keine befriedigende Antwort geben können, selbst wenn ich ein laggfreies KS hinbekomme.
Edit: Noch ein kurzes Wort wie ich es bis jetzt handhabe mit den Feuerbällen (in meinem Fall ist es ein Enterhaken).
Ich erstelle mir ein Map auf der alle Attacken und Fähigkeiten als Event "gelagert" sind. Mit dem Clone-Script lasse ich diese dann nach einem Tastendruck auf die aktuelle Map kopieren. In dem kopierten Event sind alle Eigenschaften enthalten. Es fragt auch selber nach möglichen Kollisionen ab und was nach denen passiert. Soweit die Idee und bis jetzt funktioniert noch alles wie gewollt.
Im RGSS gibt es jeweils unter game_map und game_charakter diese Methode. Diese habe ich etwas modifiziert, damit z.B. Pfeile über Abgründe und Wasser fliegen können, während diese für den Spieler nicht passable, also nicht passierbar bleiben. Damit spare ich mir eine Menge Arbeit mit through und Abfragen von "Kollision".
Zitat
Was ist eine Passable Abfrage und wie funktioniert diese?
Ich hatte sogar die Idee die Feuerbälle erst dann die Kollision abfragen zu lassen, wenn sie vor etwas nicht passierbares stoßen. Das wäre sehr Resourcen freundlich und man könnte sicherlich 10 Feuerbälle bei 10 Gegner auf einer Map verwenden. Doch mir gefiel die Ungenauigkeit der Kollision hierbei nicht, daher habe ich diese Idee verworfen.
Ob mein KS 3 Feuerbälle bei 15 Gegner laggfrei verarbeiten kann, kann ich dir noch nicht sagen. Doch da mein Spiel eher darauf zielt Labyrinthe und Rätsel im Stille von Zelda als Schwerpunkt zu haben und der Kampf eher eine Nebenbeschäftigung ist, hat das KS auch nicht den Anspruch enorm komplex zu werden.
Wenn ich eine Lösung finde kann ich sie dir gerne mitteilen. Jedoch arbeite ich soviel meine Kenntnisse mir reichen im Script, um grade die erwähnten Lags zu vermeiden. Daher werde ich dir wahrscheinlich keine befriedigende Antwort geben können, selbst wenn ich ein laggfreies KS hinbekomme.
Edit: Noch ein kurzes Wort wie ich es bis jetzt handhabe mit den Feuerbällen (in meinem Fall ist es ein Enterhaken).
Ich erstelle mir ein Map auf der alle Attacken und Fähigkeiten als Event "gelagert" sind. Mit dem Clone-Script lasse ich diese dann nach einem Tastendruck auf die aktuelle Map kopieren. In dem kopierten Event sind alle Eigenschaften enthalten. Es fragt auch selber nach möglichen Kollisionen ab und was nach denen passiert. Soweit die Idee und bis jetzt funktioniert noch alles wie gewollt.
Ähnliche Themen
-
Skript-Anfragen »-
"Team" erstellen
(10. März 2011, 19:21)
-
Events & Technik »-
Unterschiedliche Helligkeiten?
(8. März 2011, 14:41)
-
Events & Technik »-
Map Scroll Und Event Move
(29. September 2010, 22:09)
-
Skript-Anfragen »-
Zwei Scripte müssen kombiniert werden!Hilllllfffe!
(8. Dezember 2007, 21:03)
-
Eventtechnik Archiv »-
Während das Menü aufgerufen ist nicht bewegen?
(16. November 2004, 16:07)
