Problem beim "Schräglaufen" im ActionRPG

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

SalvA

Betreff: Problem beim "Schräglaufen" im ActionRPG

BeitragDi, Jan 11, 2005 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi @ all,

Ich bastle mit einem Freund an einem Actionadventure im Stil von "Secret of Evermore", "Secret of Mana" etc.
Nun ja, z.Z. sind wir dabei die Laufanimation (4WegeGrafik "optisch", aber 8Wege durch schräglaufen) zu programmieren. Allerdings gestalltet es sich enorm schwer die Figur Schräg laufen zu lassen, also wenn 2 Tatsten gleichzeitig gedrück werden. Bei uns läuft die doofe Figur dann immer erst nach oben und dann nach links, wenn man die beiden Tasten drückt. Es wäre spitze wenn es irgendwie eine Möglichkeit gäbe die Bewegung und die Animation parallel zueinander ablaufen zu lassen...

hmm.... kann uns da jemand helfen?
Im Ganzen Netz ist nirgens ein TUTORIAL zu finden, das eine 8Wege- Steuerung beschreibt. *verzweifel*

PS: ich bin der Grafiker von uns beiden, also entschuldigt bitte meine etwas unfachmännischen Bezeichnungen^^

Spikespine

BeitragDi, Jan 11, 2005 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
poste doch mal bitte den code

Hubsi

BeitragDi, Jan 11, 2005 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich das richtig verstehe (und das ist nicht einfach Very Happy ) sieht das Kostrukt zur Tastenabfrage ungefähr so aus:Code: [AUSKLAPPEN]
if keydown(oben)
 ; bla
elseif keydown(unten)
 ; bla
elseif...
Wenn dem so ist macht es einfach in der Art:Code: [AUSKLAPPEN]
if keydown(oben)
 ; bla
endif

if keydown(unten)
 ; bla
endif

usw.
Wenn es das nicht ist, macht auch nichts Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Digi_

BeitragDi, Jan 11, 2005 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ihr benutzt wohl kein else if
wenn die figur in eine richtung gehen soll, überprüft ob nicht noch eine taste gedrückt wurde (nicht die entgegengesetzte) ->schräg

sieht dann etwa so aus:

schritte = links+rechts+runter+hinauf
if schritte = 1 then
normale schritte
else if schritte>1 then
schräglaufen
else
keine taste gedrückt
endif

zu schritte>1:
if hinauf && links then schräg nach linkshinauf
else if hinfauf && rechts then schräg nach rechtshinauf
" runter && links...

oder
if hinauf && (links OR rechts) then
if links then linkshinauf
else rechtshinauf
else if if runter && (links OR rechts) then
if links then linksrunter
else rechtsrunter

Ich hoffe, du weisst was ich meine^^ (Ich weiss nicht ob es eine besser lösung gibt, ich würde es so machen...)
edit: mache es so wie hubsi wenn du keine schräganimationen machst...
  • Zuletzt bearbeitet von Digi_ am Di, Jan 11, 2005 19:43, insgesamt einmal bearbeitet
 

SalvA

BeitragDi, Jan 11, 2005 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@Spikespine

Geht klar, da gibt es allerdings ein kleines Prob, wie gesagt ich bin mehr für die Grafiken zuständig und versteh daher noch nicht allzu viel vom Programmieren. Mein Kumpel übernimmt das und der hat blöderweise kein Internet (ja, solche Leute gibts heute noch -____- nörk!) Ich kann daher nur den Code hier posten, den ich fabriziert habe. Dieser Code ist allerdings nicht besonders ..ähm... naja, es sind besser gesagt 2 codes, einmal der für die animation und dann noch der für die Bewegung der Figur. Wie schon erwähnt ist der Code von meim Kumpel weitaus komplexer und leistungsfähiger, gehn tuts aber trotzdem nich 100%^^

naja, ich poste ihn trotzdem mal hier^^

So, das ist das Teil für ne einfache Animation, dass die Figur nach rechts läuft.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Graphics 320,240,16,3
SetBuffer BackBuffer()


Global Backgroundpic = LoadImage("Testscreen.bmp")
Global hero = LoadAnimImage("laufgrafik f&s.bmp", 50, 50, 0, 28)
MaskImage hero, 255, 000, 255

Repeat
;Laufgrafik nach rechts
For charframe= 8To 13
;Laufgrafik nach links
;For charframe= 22To 27

Cls
MidHandle hero
DrawBlock Backgroundpic, 0, 0
DrawImage hero, 200, 120, charframe
Flip
Delay 170
Next

Forever
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


Hier haben wir dann die Bewegungsengine:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Graphics 320,240,16,1
SetBuffer BackBuffer()

;Wenn einem die Steuerung nicht gefällt, kann man sie hier gern ändern.
Const oben =200
Const unten =208
Const links =203
Const rechts=205




;Grafiken laden
Global Backgroundpic = LoadImage("Testscreen.bmp")
Global hero = LoadAnimImage("Laufgrafik F&S.bmp", 50, 50, 0, 28)
MaskImage hero, 255, 000, 255

; check ob die Grafiken erfolgreich geladen wurden
If hero=0
err1$="Can't Find Graphics Make Sure The Graphics Directory,"

EndIf

;Laufprogramm

; Create the timer to track speed
frameTimer=CreateTimer(60)

; Your main screen draw loop
hero_x = 160
hero_y = 120
heroframe= 14


While Not KeyHit(1)
WaitTimer(frameTimer) ; Pause until the timer reaches 60
Cls


If KeyDown(links)
heroframe= 21
hero_x=hero_x-2
If hero_x<0 Then hero_x=0
EndIf

If KeyDown(rechts)
heroframe= 7
hero_x=hero_x+2
If hero_x>320 Then hero_x=320
EndIf

If KeyDown(oben)
heroframe= 0
hero_y=hero_y-2
If hero_y<0 Then hero_y=0

EndIf


If KeyDown(unten)
heroframe= 14
hero_y=hero_y+2
If hero_y>240 Then hero_y=240
EndIf


Cls
MidHandle hero
DrawBlock Backgroundpic, 0, 0
DrawImage hero, hero_x, hero_y, heroframe





Flip
Wend

End
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ich hoffe du weißt was ich meine.


@digi_

Thx für die gute Idee.
Klingt tatsächlich nicht schlecht.
Allerdings ist ja das problem, dass wir die Laufanimation nicht parallel hinbekommen. Nun ja, ich meld mich gleich wieder, wenn ichs ausprobiert habe.
PS:
Wenn so viel Interesse besteht, mal einen Code zu schreiben für solche Sachen (egal ob ihr das völlig eigennützig macht oder für mich jetzt als Hilfe), ich kann euch ein Tileset der Secret of Evermore Figur geben, damit ihrs testen könnt.
 

SalvA

BeitragDi, Jan 11, 2005 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
sry doppelpost, geht aber an der Stelle nicht anders.

Ich muss noch erwähnen, dass die Laufanimation ja mittendrin aufhören muss, wenn der Spieler die Taste loslässt. Das ist auch ein riesen Pron -___-

Digi_

BeitragDi, Jan 11, 2005 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
statusvariable
wenn die figur sich bewegt, stellst du die eine variable auf 1 (zb figurbew)
wenn die figur sich nicht bewegt, und die variable auf 1 ist (ist wichtig wenn du andere animationen hast...), stellst du diese auf 0 und du änderst das bild der figur..
 

SalvA

BeitragDi, Jan 11, 2005 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
sry, aber es geht einfach nicht/ ich mach was falsch-___-

Mal weg von dem Schräglaufenthema und hin zu dem Ding mit der Laufanimation, die abbrechen soll, wenn ich die Taste loslasse.

Wie soll ich das machen, dass einerseits die Tastenabfrage kommt, ob die Taste noch gedrückt wird und in der selben Zeit eine Schleife abläuft, welche die Animation generiert? Alles was ich auf den Schirm bekomme ist: Figur läuft zwar, aber die Animation wird erst abgebrochen, wenn die Schleife dafür durchgelaufen ist. Und das sieht blöd aus...

Vom Prinzip her hab ich deine Lösung verstanden, aber ich kann sie nich durchführen, weil mir die Möglichkeit fehlt die Animation "während" des Laufens laufen zu lassen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group