Benötige Hilfe beim Schreiben von Bewegungsroutinen (BASIC)

Der Anlaufpunkt für alle, die selbst ein Adventure programmieren wollen.
Antworten
BLINX123
Tastatursteuerer
Tastatursteuerer
Beiträge: 675
Registriert: 11.09.2005, 15:47

Benötige Hilfe beim Schreiben von Bewegungsroutinen (BASIC)

Beitrag von BLINX123 »

Ich bin gerade dabei meine alte Engine aus QBasic Zeiten nach SDLBasic zu portieren. Damals hatte ich die Engine leider auf Grund von Speicherlimitierungen (bin leider nicht gerade ein resourcenfreundlicher Programmierer) nie zu Ende schreiben können.

Die Basis ist mitlerweile geschrieben, aber ich habe Probleme die Maussteuerung umzusetzen (war schon immer mein Kryptonit. Hätte ich eine Kings Quest ähnliche Engine mit Tastatursteuerung und Parser schreiben wollen, wäre ich wahrscheinlich längst fertig).

Derzeit sieht der Mauscode folgendermaßen aus.

while not key(k_esc)
locate(0,10)
prints( "Current X mouse coordinate is: " & mouseX )
prints( "Current Y mouse coordinate is: " & mouseY )
waitVBL
prints( mouseButton )
if mousebutton=1 then
sprite(2, mouseX, mouseY, 2)
end if
wend
Damit kommt natürlich kein wirkliches Point&Click Gefühl auf (eher Drag&Drop).
Hat Jemand eine Lösung (am besten in Form eines Beispielcodes, gerne aber auch einfach ein umsetzbares Konzept) für dieses Problem?

Das ganze sollte am Ende so wie bei SCUMM oder anderen Adventure Engines ablaufen. D.h. die Laufanimationen liegen in einem File vor, werden bei Runtime in ein Array geladen und daraus dann einzeln bei Wiedergabe wieder zusammengesetzt (in Einzelbildern von gleicher Auflösung).

Ich frage mich daher auch, wie ich es hinbekomme, dass genau die korrekten Einzelbilder abgerufen werden. E.g. wenn ich nach unten klicke, der Charakter gen Süden geht und dies auch in der Animation so wiedergespiegelt wird (also nicht die links oder rechts Animation verwendet wird.

Ich weiss nicht ob Lebostein noch unter uns weilt, aber wenn, wäre es toll, wenn er mir ein paar Snippets aus seiner alten Herr der Löffel Engine oder ähnliches geben könnte. Wäre interessant zu wissen, wie da die Wegfindung umgesetzt wurde.
Karm
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 234
Registriert: 22.07.2007, 15:15
Kontaktdaten:

Re: Benötige Hilfe beim Schreiben von Bewegungsroutinen (BAS

Beitrag von Karm »

Was spricht denn gegen sowas wie:

getPos SpritePos
while MousePos <> SpritePos do Animation

bzw. if MousePosX - SpritePosX > MousePosY - SpritePosY Do AnimationWagerecht
bzw. sogar besser: Wenn MousePosX - SpritePosX = 0 Do Animation blubb

Edit: für Nach unten natürlich MPX-SPX < MPY-SPY bzw. MPX-SPX = 0

Ist das zu Resourcenfressend?
BLINX123
Tastatursteuerer
Tastatursteuerer
Beiträge: 675
Registriert: 11.09.2005, 15:47

Re: Benötige Hilfe beim Schreiben von Bewegungsroutinen (BAS

Beitrag von BLINX123 »

Karm hat geschrieben:Was spricht denn gegen sowas wie:

getPos SpritePos
while MousePos <> SpritePos do Animation

bzw. if MousePosX - SpritePosX > MousePosY - SpritePosY Do AnimationWagerecht
bzw. sogar besser: Wenn MousePosX - SpritePosX = 0 Do Animation blubb

Edit: für Nach unten natürlich MPX-SPX < MPY-SPY bzw. MPX-SPX = 0

Ist das zu Resourcenfressend?
Nein. Ist nicht zu Ressourcenfressend (interessiert mich ja nun eigentlich auch nichtmehr, da die neuen Basic Fassungen alle keine konventionellen Speicherlimitierungen mehr enthalten).

Werde ich heute einmal versuchen.
Karm
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 234
Registriert: 22.07.2007, 15:15
Kontaktdaten:

Re: Benötige Hilfe beim Schreiben von Bewegungsroutinen (BAS

Beitrag von Karm »

ist aber jetzt nur ein Konzept, also musst auch noch sowas wie Minuswerte berücksichtigen (also die andere Richtung ^^)
und sicher Auch Seitenränder und sowas, zumindest musste ich das immer bei meinen alten Basic Programmen.
und ich weiß nicht, wie das mit Collisionsboxen ist(wie heißen die nochmal richtig?)
Also damit dein Char später auf Wegen läuft und nicht halb in der Einrichtung hängt.
Aber ka was in dem Programm alles implementiert ist ^^
BLINX123
Tastatursteuerer
Tastatursteuerer
Beiträge: 675
Registriert: 11.09.2005, 15:47

Re: Benötige Hilfe beim Schreiben von Bewegungsroutinen (BAS

Beitrag von BLINX123 »

Das ist dann aber nur die reine Bewegunsrichtung an sich, oder?

Fehlt also immer noch ein passendes Konzept für die Bewegung von A nach B. Wenn ich derzeit auf eine Position klicke, so wird das Player Sprite von der alten Position gelöscht und an die neue gesetzt. Mit deinem Konzept wäre das dann immer noch der Fall, aber zumindest würde die Figur dann in die korrekte Richtung ausgerichtet sein.

Was jetzt also noch fehlt ist quasi der ganze Weg zwischen A (Ausgangspunkt) und B (Endpunkt).
Karm
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 234
Registriert: 22.07.2007, 15:15
Kontaktdaten:

Re: Benötige Hilfe beim Schreiben von Bewegungsroutinen (BAS

Beitrag von Karm »

Achso das ist ja kein Problem:

Mit timer oder Gameplayschleife
MousePosX - SpritePosX + GeschwindigkeitX
MousePosY - SpritePosY + GeschwindigkeitY
Until SpritePosX = MousePosX

bei Geschwindigkeit am besten irgendwas reinpacken, damit der nicht Pixel pro Pixel läuft, sondern 8tel Pixel oder so und am Ende einmal runden ^^

Oder mach was mit vorgegeben Pfaden
(ansonsten ist die Routine die gleiche, nur das du vorher sagst wolang die Person läuft, also Überprüfst ob der die Bewegung die du ausführen möchtest auf dem "Weg" liegt)
Das wäre jetzt aber nur eine Methode ohne Pathfinding ^^
Beim Pathfinding musst du die Person dann nen Pfad finden, mach dich doch da mal schlau das könnte man auch machen, ist aber eigentlich zu aufwändig für kleinere Adventure (in der Regel)^^

und wärend du läufst PlayAnimation statt einem Standbild natürlich
BLINX123
Tastatursteuerer
Tastatursteuerer
Beiträge: 675
Registriert: 11.09.2005, 15:47

Re: Benötige Hilfe beim Schreiben von Bewegungsroutinen (BAS

Beitrag von BLINX123 »

Genau die Commands habe ich gesucht :)

Mal sehen ob die auch tatsächlich mit SDLBasic laufen, sonst programmier ich die Engine jetzt Sierra AGI like fertig und steige dann für die Point&Click Fassung auf QB64 um (wo ich dann auch meinen alten, geliebten QB Syntax habe).

Der Syntax von SDLBasic ist wirklich unglaublich limitiert.

Was das Pathfinding angeht: Da setze ich später noch auf A* (A-Star).
Karm
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 234
Registriert: 22.07.2007, 15:15
Kontaktdaten:

Re: Benötige Hilfe beim Schreiben von Bewegungsroutinen (BAS

Beitrag von Karm »

Also ne Sprite kannst du damit bewegen, habe grad mal kurz in die Doc geguckt und da stehen die 2 Commands drin. und gibt sogar automatische Spriteaktualisierung Nur wie das mit animationen ist hab ich nich geschaut, aber das kriegst du sicher auch hin ;)

lg
Karm
Antworten