WASD-Steuerung

Das Board für Schwierigkeiten beim Adventure-Machen und zum Melden von Bugs
Post Reply
parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

WASD-Steuerung

Post: # 74468Post parkiii
11 Sep 2009, 19:50

Hey, in meinem Spiel fungieren Tasten als Bewegungssteuerung, allerdings möchte ich,

1.) dass der Charakter bei gewissen Walkmappunkten sofort stehen bleibt

oder

2.) bei einmaligem Drücken der Taste nur 1 Feld geht.



Skript für Steuerung

Code: Select all

on (loop2)
{

 if_bool (Gehen verfügbar ; true)
 {

 (*nach unten dauernd*)
  if_keypressed (s)
  {
  stepto (self ; down)
  lookto (self ; 1)
  }
 (*nach unten dauernd*)
  if_keypressed (w)
  {
  stepto (self ; up)
  lookto (self ; 2)
  }
 (*nach rechts dauernd*)
  if_keypressed (d)
  {
  stepto (self ; right)
  lookto (self ; 3)
  }
 (*nach links dauernd*)
  if_keypressed (a)
  {
  stepto (self ; left)
  lookto (self ; 4)
  }
}
}
Und es hat einen Grund, dass ich die Steuerungsbefehle nicht ins Main, sondern ins Raumskript schreibe.



Probleme:


1.) Bei Walkmappunkten sieht der Skript folgendermaßen aus:

Code: Select all

if_charin (Dieb5 ; 009 - Route 1 Wald)
{
setbool (Gehen verfügbar ; false)
speech (Dieb5 ; !)
timer (1)
lookto (self ; Dieb5)
timer (3)
speech (Dieb5 ; An mir kommst du nicht vorbei!)
timer (5)
cutscene (Kampf 007 - Dieb)
}
Allerdings bleibt der Charakter dann nicht unmittelbar stehen, sondern geht noch 1 Feld weiter. Natürlich könnte ich beim Überschreiten des Walkmappunktes das nächste Feld auf false setzen, allerdings wäre das extrem viel Arbeit für jeden Punkt.


2.) Bei kurzem Drücken geht der Charakter 2 Felder in die Richtung. Manchmal kann es also ziemlich nervig sein, ein bestimmtes Schild oder eine Truhe zu erreichen.

Hab schon probiert, zusätzlich zu den if_keypressed Befehlen noch einen if_keydown Befehl einzubauen, allerdings funktioniert die Steuerung dann auch nicht erwünscht, da entweder nur der keypressed oder nur der keydown Befehl ausgeführt wird.

Zimond
Der Engine Papa
Posts: 3420
Joined: 06 Apr 2003, 19:34
Location: Krefeld
Contact:

Post: # 74469Post Zimond
11 Sep 2009, 20:23

Höchstwahrscheinlich wird in der Engine das Loop skript noch vor dem Walkmapskript abgearbeitet, was heißt bevor der Stopp in Kraft tritt wird noch ein Stepto ausgeführt.

Wenn du generell nur willst das immer nur ein Schritt pro tastendruck gegangen wird tausche einfach alle if_keypressed gegen if_keydown.. letzteres löst pro tastendruck nur ein mal aus.

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Post: # 74470Post parkiii
11 Sep 2009, 20:45

jap, das ist schon klar, allerdings müsste man dann zigtausend mal drücken um durch die landschaft zu gehen.

ich werd mir schon was einfallen lassen, wenn der makel zu tragisch ist, stelle ich notfalls immer die nächsten walkmap punkte auf false.

wollte nur wissen obs da ne andere möglichkeit gibt :wink:

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 74471Post Schiman
12 Sep 2009, 00:06

Warum verwendest du keine einfache Funktion, um diese Bewegung zu realisieren? So musst du das ja in jeden Raum reinkopieren.. ist also extrem lästig.

Eine Funktion, die du bei Belieben an oder ausschaltest.

Was deine StepTos betrifft... ich würde das mit Walkto realisieren:

Code: Select all

(*nach unten dauernd*)
  if_keypressed (s)
  {
  walkto (self ; +0;+1)
  }
 (*nach unten dauernd*)
  if_keypressed (w)
  {
  walkto (self ; +0;-1)
  }
 (*nach rechts dauernd*)
  if_keypressed (d)
  {
  walkto (self ; +1;+0)
  }
 (*nach links dauernd*)
  if_keypressed(a)
  {
  walkto (self ; -1;+0)
  }
Das Laufen an sich funktioniert so natürlich hervorragend. Das Problem ist nur, dass die Laufanimation des Charakters auf diese Weise total abgehackt sein wird, weil die Engine die Animation immer wieder von vorne abspielen wird.

You know?

Dein Problem mit dem Stehenbleiben auf einigen Walkmappunkten kannst du locker mit stopfunction realisieren. Danach musste nur die Lauffunktion wieder anwerfen.

Nur halt mit den Animationen... Ich wüsste schon ne Lösung, aber dabei kriege ich selber Pusteln XD. Den Char als Dummy darstellen (also ohne Grafiken und mit einem Objekt überlegen, das seine Animationen beinhaltet. Dann das Objekt über Zustände steuern. Damit könntest du eine flüssige Animation hinbekommen. Ist nur aufwändig.

Lachi
An Adventure Creator
Posts: 316
Joined: 07 Aug 2008, 22:32

Post: # 74472Post Lachi
12 Sep 2009, 00:44

Ich habe das Problem mit einem dazwischengeschobenen wait(0,2) gelöst.
[img]http://img269.imageshack.us/img269/4060/enjoylachibalken.png[/img]

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 74474Post Schiman
12 Sep 2009, 09:47

Wenn ich wait(0,2) reinschiebe, dann bewegt sich der Charakter abgehackt. Also so Schritt für Schritt. Es hängt natürlich davon ab welche Bewegungsgeschwindigkeit dein Char hat. Ich habe mal rumgespielt und verschiedene Wartezeiten durchprobiert... Ich bekomms nicht flüssig hin.

Lachi
An Adventure Creator
Posts: 316
Joined: 07 Aug 2008, 22:32

Post: # 74484Post Lachi
12 Sep 2009, 18:33

also hier nochmal detailierter: Code aus dem Raumscript

Code: Select all

on(loop2)
{
if_keypressed(up)
 stepto(hut;up)
if_keypressed(down)
 stepto(hut;down)
if_keypressed(left)
 stepto(hut;left)
if_keypressed(right)
 stepto(hut;right)
wait(0,13)
}
muß allerdings zugeben, daß der Charakter nur von oben gesehen wird (in diesem Fall ein großer Hut), bei dem keine Animationsphasen enthalten sind. Wie es mit animierten Laufbewegungen aussieht, habe ich nicht getestet.
[img]http://img269.imageshack.us/img269/4060/enjoylachibalken.png[/img]

Post Reply