RPG Spiel Steuerungsfehler???
Übersicht

![]() |
jonnyboyBetreff: RPG Spiel Steuerungsfehler??? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute, da bin ich wieder mit meinem neuen projekt.
Ich hab seid gestern dem minitaschenrechner nurnoch Blitzbasic gelernt... =P Gerade versuche ich, ein kleines RPG Spiel zu schreiben. Das Problem bei meiner Steuerung ist, das ich einfach nicht dahintersteige, wenn ich einmal nach rechts drücke, geht der typ auch eines weiter. aber danach nichtmehr! wenn ich dann zurück nach links drücke, kommt die Fehlermeldung "Array index out of bounds". ich hab mir die Steuerung von www.robsite.de von dem Tutorial von Blitzmaster abguckt... und eig ist da nun alles gleich... -.- Frage: Warum funktioniert meine Steuerung nicht??? Und..wenn es geht... ![]() Also versteht mich nicht falsch, das ich, sobald etwas nicht klappt, euch frage. Ich habe schon allerlei andere ausführungen ausprobiert und mir den Kopf zerbrochen, worans liegen könnte. Funktionscode: Code: [AUSKLAPPEN] Function typlauf() ;Typ verschieben
If KeyDown (205) Then If karte(xtry + 1,ytry) < 3 Then xtry = xtry + 1 move= 1 End If End If If KeyDown (203) Then If karte(xtry - 1,ytry) < 3 Then xtry = xtry - 1 move= 1 End If End If If move = 1 Then spx = xtry * 57 spy = ytry * 57 DrawImage(typ,spx,spy,3) End Function für das ganze Game: (falls ihr keinen Fehler im vorigen finden könnt) Code: [AUSKLAPPEN] ;######################
;LITTLE MAN Version 1.0 ;das MiniSpiel,erstellt ;mit Blitz Basic ;von BMC-Games ;###################### Graphics 800, 600 Global karteset = LoadAnimImage("karte.bmp",57,57,0,6) ;KartenSet laden Global typ = LoadAnimImage("interaktive.bmp",57,57,0,6) ;Figuren laden MaskImage typ, 255,0,255 Global spx = 0 Global spy = 0 Dim karte(13,9) ;Level 1 Data 0,0,0,0,0,0,0,0,5,0,5,0,5,5 Data 1,1,0,0,0,5,0,0,2,3,4,0,0,0 Data 0,1,1,5,0,0,0,0,0,0,5,5,5,0 Data 1,1,1,5,0,5,0,0,0,0,5,0,5,5 Data 1,0,0,5,5,0,1,0,5,0,5,5,0,5 Data 0,1,0,5,0,0,0,1,0,5,0,5,5,5 Data 3,3,4,0,0,0,0,1,0,0,0,0,5,0 Data 0,5,2,3,4,5,0,0,0,5,5,5,0,2 Data 0,0,0,5,5,5,0,0,1,1,0,1,0,1 Data 5,5,0,5,0,2,4,0,0,0,1,1,1,0 For y = 0 To 9 ;löschen der Karte For x = 0 To 13 Read karte(x,y) Next Next Repeat ;ANFANG HAUPTSCHLEIFE #################### SetBuffer BackBuffer() Cls If KeyDown (1) Then End mapmalen() typlauf() Flip Forever ;ENDE HAUPTSCHLEIFE ###################### Function mapmalen() ;Karte zeichnen For y = 0 To 9 For x = o To 13 DrawImage karteset,x * 57, y * 57,karte(x,y) Next Next End Function Function typlauf() ;Typ verschieben If KeyDown (205) Then If karte(xtry + 1,ytry) < 3 Then xtry = xtry + 1 move= 1 End If End If If KeyDown (203) Then If karte(xtry - 1,ytry) < 3 Then xtry = xtry - 1 move= 1 End If End If If move = 1 Then spx = xtry * 57 spy = ytry * 57 DrawImage(typ,spx,spy,3) End Function EDIT: Codetags eineditiert. MfG BladeRunner |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitte benutze in Zukunft die Codetags, sie machen deine Postings wesentlich besser zu lesen.
Wenn Du ein Posting verfasst sind sie unter den smileys zu finden. Danke. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
jonnyboy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für das einfügen der Codetags, Bladerunner, hätte ich auch noch gemacht... =)
Hm... kann mir aber denn keiner helfen? ![]() |
||
Bassmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier ist ein beispiel Code für Bewegungen in RPG´s :
Code: [AUSKLAPPEN] Graphics 640,480,32,0 Global Tileset = LoadAnimImage("tileset2.png" ,32,32,0,19) Global char = LoadImage ("char2.png") MaskImage char ,255,255,255 ;---- Haus Tiles ----------------------------------------------- ;---------------------------------------------------------------- ;----------------------------------- Global ppx = 10*32 ;X-Position des Charackters Global ppy = 7*32 ;Y-Position des Charackters Global py = 7 ;Kollisions X-Position des Charackters Global px = 10 ;Kollisions Y-Position des Charackters Global scrolly ;Die Variable fr die ScrollY-Position Global scrollx ;Die Variable fr die ScrollX-Position Global gold = 10 ;start geld ;-------------------------------- Dim map(25,25) ; 0 = wiese ; 1 = sand ; 2 = hebel ; 3 = wasser ; 4 = tür ; 5 = feuer ; 6 = baum ;haus fängt ab 8 an ;26 nach rechts ;26 nach unten Data 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,6,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,7,1,1, 0,0,0,0,0, 5 Data 5,5,5,5,5, 5,5,4,5,5, 5,5,4,5,5, 5,5,5,5,5, 5,5,5,5,5, 5 Data 5,0,0,0,0, 0,0,2,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 8,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 9,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 10,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 11,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5 Data 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5 For x = 0 To 25 For y = 0 To 25 Read map(x,y) Next Next Repeat SetBuffer BackBuffer() Cls For x = 0 To 25 For y = 0 To 25 DrawBlock tileset,x*32-scrollx,y*32-scrolly,map(x,y) ;map malen Next Next DrawImage char,ppx-scrollx,ppy-scrolly ;figur male ;----Bewegungsroutinen---------------------------------------------------------------------------------- Print "------" Print "px" Print px Print "------" Print "------" Print "py" Print py Print "------" Print "------" Print "ppx" Print ppx Print "------" Print "------" Print "ppy" Print ppy Print "------" Select move ;links Case 1 ;Spielerposition ndern scrollx = scrollx - 2 ppx = ppx - 2 ;Variable, die zhlt wie weit der Spieler bereits bewet wurde counter=counter+1 If counter = 16 Then px = px - 1 counter = 0 move = 0 EndIf ;Rechts Case 2 ;Spielerposition ndern scrollx = scrollx + 2 ppx = ppx + 2 ;Variable, die zhlt wie weit der Spieler bereits bewet wurde counter = counter+1 If counter = 16 Then px = px + 1 counter = 0 move = 0 EndIf ;runter Case 3 ;Spielerposition ndern scrolly = scrolly + 2 ppy = ppy + 2 ;Variable, die zhlt wie weit der Spieler bereits bewet wurde counter = counter+1 If counter = 16 Then py = py + 1 counter = 0 move = 0 EndIf ;rauf Case 4 ;Spielerposition ndern scrolly = scrolly - 2 ppy = ppy - 2 ;Variable, die zhlt wie weit der Spieler bereits bewet wurde counter = counter+1 If counter = 16 Then py = py - 1 counter = 0 move = 0 EndIf End Select ;Cursor Rechts If KeyDown(205) Then ;Kollision checken, wie ihr es schon kennt If map(px+1,py) < 3 Then ;der nchste Tastatur-eingabe-impuls wird mglich sobald die vorige Bewegung abgeschlossen ist ;das heit in der Zeit wo keine Tastatur-eingabe erfolgen kann wird zur Zeit gescrollt If move=0 Then ;die Scrollroutine move=2 ( Case 2 ) wird aufgerufen move = 2 End If End If End If ;Cursor Links If KeyDown(203) Then ;Kollision checken, wie ihr es schon kennt If map(px-1,py) < 3 Then ;der nchste Tastatur-eingabe-impuls wird mglich sobald die vorige Bewegung abgeschlossen ist ;das heit in der Zeit wo keine Tastatur-eingabe erfolgen kann wird zur Zeit gescrollt If move=0 Then ;die Scrollroutine move=1 ( Case 1 ) wird aufgerufen move = 1 End If End If End If ;runter key If KeyDown(208) Then If map(px,py+1) < 3 Then If move = 0 Then move = 3 End If End If End If ;rauf key If KeyDown(200) Then If map(px,py-1) < 3 Then If move = 0 Then move = 4 End If End If End If Flip Forever |
||
![]() |
jonnyboy |
![]() Antworten mit Zitat ![]() |
---|---|---|
J, nach diesem Muster hab ichs ja auch gemacht.. nach dem RPG-tutvon Blitzmaster mit dem "char"... und nach dem Prinzip ist es ja auch aufgebaut... ![]() ![]() |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi. Folgendes ist mir aufgefallen:
Codeeinrückungen helfen bei der Lesbarkeit ungemein! Setbuffer gehört vor die Schleife. Kommentar lautet: Lesen der Karte, nicht löschen der Karte. "If KeyDown (1) Then End" kann man gut an den Schleifenkopf oder ans Schleifenende packen. Der Hund liegt in der Function typlauf begraben. Die Variablen xtry und ytry sind nicht bekannt. Sie sind bei jedem Functionsaufruf zurück auf null gesetzt, mach sie global und es funktioniert. und hier der (etwas verbesserte) Code: Code: [AUSKLAPPEN] ;######################
;LITTLE MAN Version 1.0 ;das MiniSpiel,erstellt ;mit Blitz Basic ;von BMC-Games ;###################### Graphics 800, 600, 0, 2 Global karteset = LoadAnimImage("d:\bild.jpg",57,57,0,6) ;KartenSet laden Global typ = LoadAnimImage("d:\pic.jpg",57,57,0,6) ;Figuren laden MaskImage typ, 255,0,255 Global spx = 0, spy = 0 Global xtry = 0, ytry = 0 Dim karte(13,9) ;Level 1 Data 0,0,0,0,0,0,0,0,5,0,5,0,5,5 Data 1,1,0,0,0,5,0,0,2,3,4,0,0,0 Data 0,1,1,5,0,0,0,0,0,0,5,5,5,0 Data 1,1,1,5,0,5,0,0,0,0,5,0,5,5 Data 1,0,0,5,5,0,1,0,5,0,5,5,0,5 Data 0,1,0,5,0,0,0,1,0,5,0,5,5,5 Data 3,3,4,0,0,0,0,1,0,0,0,0,5,0 Data 0,5,2,3,4,5,0,0,0,5,5,5,0,2 Data 0,0,0,5,5,5,0,0,1,1,0,1,0,1 Data 5,5,0,5,0,2,4,0,0,0,1,1,1,0 For y = 0 To 9 ;Lesen der Karte For x = 0 To 13 Read karte(x,y) Next Next SetBuffer BackBuffer() Repeat ;ANFANG HAUPTSCHLEIFE #################### Cls mapmalen() typlauf() Flip Until KeyDown(1) Function mapmalen() ;Karte zeichnen For y = 0 To 9 For x = o To 13 DrawImage karteset,x * 57, y * 57,karte(x,y) Next Next End Function Function typlauf() ;Typ verschieben If KeyDown (205) Then If karte(xtry + 1, ytry) < 3 Then xtry = xtry + 1 move= 1 End If End If If KeyDown (203) Then If karte(xtry - 1,ytry) < 3 Then xtry = xtry - 1 move= 1 End If End If If move = 1 Then spx = xtry * 57 spy = ytry * 57 DrawImage(typ,spx,spy,3) End Function Der nächste Schritt wäre zu überprüfen, ob die Figur über den Rand der Karte hinausläuft, denn dann läufst du auch aus dem Map-array raus und es gibt ne Fehlermeldung. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
jonnyboy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Viiielen Dank,Spion Atom, jez hab ichs gecheckt ![]() Großes Lobv auch an das Forum, hier erhält man wirklich konstruktive Hilfe... BIG UP!!! ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group