Tilemap verschoben(scrollen)!?
Übersicht

AnimatorBetreff: Tilemap verschoben(scrollen)!? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute, ich brauche mal wieder eure Hilfe:
Ich arbeite im Moment an einem Spiel namens Dragonsouls und die Welt besteht aus einer Tilemap. Ich dachte ich lasse die ganze Karte jetzt mal einfach Scrollen: Pustekuchen, seit gestern Abend macht mich das Programm echt fertig: Ja, die Karte Scrollt, aber die Kollisionen sind verschoben und das "Array Index out of bounds" kommt viel weiter oben als sonst( ausserhalb der Tilemap, unten natürlich umgekehrt) daraus schließe ich das mein Code zwar das tileset verschiebt, aber nicht die map(x,y). Aber wie soll ich es dann machen? das ist der ganze Code: Code: [AUSKLAPPEN] AppTitle "Dragonsouls"
Graphics 860,650,16,2 tileset = LoadAnimImage("tileset.bmp",32,32,0,5) Musik_1 = LoadSound Player = LoadAnimImage("Charakter_2.bmp",32,32,0,12) Drache_1 = LoadImage("Drache_1.bmp") MaskImage Drache_1, 255,255,255 MaskImage Player, 255,255,255 MaskImage tileset, 255,255,255 Type Drachen Field Bild Field Drachen_X Field Drachen_Y Field Schaden Field spezial_Angriff_Grafik Field speziel_Angriff_Schaden Field Frame Field Leben End Type Global D.Drachen For Drachen_Generierung = 0 To 2 D = New Drachen D\Bild = Drache_1 D\Drachen_X = 200 D\Drachen_Y = 200 D\Schaden = 10 D\spezial_Angriff_Grafik = 0 D\speziel_Angriff_Schaden = Schaden * 2 D\Frame = 1 D\Leben = 200 Next Player_X# = 13 Player_Y# = 10 Dim Map(40,40) Data 0,0,0,0,2,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,0,0,0,2,0,0,0,0,0,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0 Data 2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 For y = 0 To 40 For x = 0 To 40 Read Map(x,y) Next Next SeedRnd MilliSecs() Repeat SetBuffer BackBuffer() Cls Zufall = Rand(1,10) If Zufall = 1 Then EndIf For y = 0 To 40 For x = 0 To 40 DrawBlock tileset,X*32 + X2,Y*32 + Y2,map(x,y) Next Next If KeyDown(208) If map(Player_X#,Player_Y#+0.5) < 4 Then ;Unten Y2 = Y2 - 3 Player_Y# = Player_Y# + 0.1 If Player_Frames > 1 Then Player_Frames = 1 If Frames = 0 And Frame_Timer > 1 Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 Frame_Timer = Frame_timer + 1 EndIf EndIf If KeyDown(200) If map(Player_X#,Player_Y#-0.1) < 4 Then ;Oben Y2 = Y2 + 3 Player_Y# = Player_Y# - 0.1 If Player_Frames > 4 Then Player_Frames = 4 If Frames = 0 And Frame_Timer > 1 Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 Frame_Timer = Frame_timer + 1 EndIf EndIf If KeyDown(205) If map(Player_X#+0.2,Player_Y#) < 4 Then ;Rechts X2 = X2 - 3 Player_X# = Player_X# + 0.1 If Player_Frames > 7 Then Player_Frames = 7 If Frames = 0 And Frame_Timer > 1 Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 Frame_Timer = Frame_timer + 1 EndIf EndIf If KeyDown(203) If map(Player_X#-0.3,Player_Y#) < 4 Then ;Links X2 = X2 + 3 Player_X# = Player_X# - 0.1 If Player_Frames > 10 Then Player_Frames = 10 If Frames = 0 And Frame_Timer > 1 Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 Frame_Timer = Frame_timer + 1 EndIf EndIf Frames = 0 ;If D.Drachen <> Null Then For D = Each Drachen DrawImage D\Bild, D\Drachen_X, D\Drachen_Y ;D\Drachen_X = D\Drachen_X - 1 Next ;EndIf If Player_Frames > 11 Then Player_Frames = 0 DrawImage Player,Player_X * 32,Player_Y * 32, Player_Frames ;x = Player_X# * 32 - Scroll_X : y = Player_Y * 32 - Scroll_Y :DrawImage Player,X,Y, Player_Frames Flip Until KeyDown(1) End das sind die wichtigen Stellen: Code: [AUSKLAPPEN] If KeyDown(208)
If map(Player_X#,Player_Y#+0.5) < 4 Then ;Unten Y2 = Y2 - 3 Player_Y# = Player_Y# + 0.1 If Player_Frames > 1 Then Player_Frames = 1 If Frames = 0 And Frame_Timer > 1 Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 Frame_Timer = Frame_timer + 1 EndIf ------------------------------------------------------------------------------- For y = 0 To 40 For x = 0 To 40 DrawBlock tileset,X*32 + X2,Y*32 + Y2,map(x,y) Next Next EndIf Verbesserungen am Code sind erwünscht, gerade im Bereich Tilemap bin ich Anfänger! ![]() danke im vorraus MFG Animator |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du mit Float Koordinaten auf ein Array zugreifst, musst du sehr sicher sein, das die automatische Rundung so funktioniert, wie du das erwartest. Sicherheitsabfragen wären da vielleicht sinnvoll.
Bitte vermeide Zeilen wie die: Code: [AUSKLAPPEN] Y2 = Y2 - 3 Player_Y# = Player_Y# + 0.1
Das ist unleserlich und schreit nach Fehlern. Du hast genug Platz, nimm eine neue Zeile! Wenn es unbedingt alles in einer Zeile stehen muss, benutzte wenigstens einen Doppelpunkt um das ganze Regel konform von einander zu trennen. Genauso verzichtest du besser nicht auf Then. Wenn die Kollisionen verschoben sind, wirst du deine Scroll Variablen irgendwo nicht beachtet haben. Am besten wäre es, wenn du alle Variablen Local ![]() BlitzBasic lässt einem (zu) viel durchgehen - so wird das debuggen schwerer als es sein muss. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Animator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die Tiles werden ja verschoben, nur die map(x,y) nicht und eigentlich sollten beide mit den gleichen Parametern aufgerufen werden!? | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was in der Map steht ist für's Scrollen irrelevant. Du Zeichnest die Tiles wo anders hin, du änderst keine Kartendaten. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
ZEVSBetreff: Type-Design / Normalisierungsformen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mir fällt das Design des Types Drachen negativ auf. Types sollte man genauso normalisieren wir Datenbanken.
(http://de.wikipedia.org/wiki/N...tenbank%29). Die konkrete Verbesserung schlage ich so vor: BlitzBasic: [AUSKLAPPEN]
Des weiteren ist es unpraktisch, Tilemaps mit Data-Blöcken zu speichern. Der entsprechende Thread ist https://www.blitzforum.de/foru...hp?t=37365. Schau ihn dir doch mal an! Der Sinn der Variable Zufall und der folgenden If-Abfrage verschließt sich mir leider. Die relevanten Code-Teile sehen furchtbar aus, außerdem vermisse ich einige Variablendeklarationen. Die Bedeutung der Variablen hätte mich auch mal interessiert. Ich bitte dich daher um einen ordentlichen (Einrücken ist toll!) und ausreichend kommentierten Code bzw. eine kurze Erläuterung der Variablen. Ich habe nämlich keine Lust, mir das selbst zusammenzusuchen und viele andere wohl auch. |
||
Animator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für die kritik =) mit dem Drachen hast du vollkomen recht, aber den hab ich auch nur geschrieben um etwas zu testen(dieser "Fremdschlüssel" ist ne tolle sache, danke!). Das ich sie nicht extern speichere ist soweit absicht ![]() so, jetzt nochmal etwas ordentlicher: Kompletter Code: Code: [AUSKLAPPEN] AppTitle "Dragonsouls"
Graphics 860,650,16,2 tileset = LoadAnimImage("tileset.bmp",32,32,0,5) Player = LoadAnimImage("Charakter_2.bmp",32,32,0,12) Drache_1 = LoadImage("Drache_1.bmp") MaskImage Drache_1, 255,255,255 MaskImage Player, 255,255,255 MaskImage tileset, 255,255,255 ;Types Type Drache Field Art.DrachenArt Field Drachen_X Field Drachen_Y Field Frame Field Leben End Type Type DrachenArt Field Bild Field Schaden Field spezial_Angriff_Grafik Field speziel_Angriff_Schaden End Type Global D.Drachen For Drachen_Generierung = 0 To 2 D = New Drachen D\Bild = Drache_1 D\Drachen_X = 200 D\Drachen_Y = 200 D\Schaden = 10 D\spezial_Angriff_Grafik = 0 D\speziel_Angriff_Schaden = Schaden * 2 D\Frame = 1 D\Leben = 200 Next Player_X# = 13 Player_Y# = 10 ;ich lasse es vorerst in einer Data ;). Dim Map(40,40) Data 0,0,0,0,2,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,0,0,0,2,0,0,0,0,0,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0 Data 2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2 Data 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 For Y = 0 To 40 For X = 0 To 40 Read Map(x,y) Next Next Repeat SetBuffer BackBuffer() Cls ;X und Y sind die Koordinaten der Tilemap. For Y = 0 To 40 For X = 0 To 40 ;X2 und Y2 sind quasi die Scrollvariable(irgendwo hier in der Gegend muss der Fehler sein!?). DrawBlock tileset, X * 32 + X2, Y * 32 + Y2, map(x,y) Next Next ;hier kommt jetzt die Bewegung des Spielers(eine Menge Gewirr das ich sicher besser hätte lösen können(das ganze bewirkt dass die Frames besser abgespielt werden) If KeyDown(208) If map(Player_X#,Player_Y#+0.5) < 4 Then ;Unten Y2 = Y2 - 3 ;: Player_Y# = Player_Y# + 0.1 If Frames = 0 And Frame_Timer > 20 And Taste = 1 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Frames = 0 And Frame_Timer > 0 And Taste <> 1 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Player_Frames <> 2 Then Player_Frames = 1 Frame_Timer = Frame_timer + 1 Taste = 1 EndIf EndIf If KeyDown(200) If map(Player_X#,Player_Y#-0.1) < 4 Then ;Oben Y2 = Y2 + 3 ;: Player_Y# = Player_Y# - 0.1 If Frames = 0 And Frame_Timer > 20 And Taste = 2 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Frames = 0 And Frame_Timer > 0 And Taste <> 2 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Player_Frames <> 5 Then Player_Frames = 4 Frame_Timer = Frame_timer + 1 Taste = 2 EndIf EndIf If KeyDown(205) If map(Player_X#+0.2,Player_Y#) < 4 Then ;Rechts X2 = X2 - 3 ;: Player_X# = Player_X# + 0.1 If Frames = 0 And Frame_Timer > 20 And Taste = 3 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Frames = 0 And Frame_Timer > 0 And Taste <> 3 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Player_Frames <> 7 Then Player_Frames = 6 Frame_Timer = Frame_timer + 1 Taste = 3 EndIf EndIf If KeyDown(203) If map(Player_X#-0.3,Player_Y#) < 4 Then ;Links X2 = X2 + 3 ;: Player_X# = Player_X# - 0.1 If Player_Frames > 10 Then Player_Frames = 10 If Frames = 0 And Frame_Timer > 20 And Taste = 4 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Frames = 0 And Frame_Timer > 0 And Taste <> 4 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Player_Frames <> 10 Then Player_Frames = 9 Frame_Timer = Frame_timer + 1 Taste = 4 EndIf EndIf Frames = 0 ;Spielfigur zeichnen ;) DrawImage Player,Player_X# * 32,Player_Y# * 32, Player_Frames ;x = Player_X# * 32 - Scroll_X : y = Player_Y * 32 - Scroll_Y :DrawImage Player,X,Y, Player_Frames Flip Until KeyDown(1) End (EDIT:) Wichtige Teile: Code: [AUSKLAPPEN] For Y = 0 To 40
For X = 0 To 40 ;X2 und Y2 sind quasi die Scrollvariable(irgendwo hier in der Gegend muss der Fehler sein!?). DrawBlock tileset, X * 32 + X2, Y * 32 + Y2, map(x,y) Next Next If KeyDown(208) If map(Player_X#,Player_Y#+0.5) < 4 Then ;Unten Y2 = Y2 - 3 ;: Player_Y# = Player_Y# + 0.1 If Frames = 0 And Frame_Timer > 20 And Taste = 1 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Frames = 0 And Frame_Timer > 0 And Taste <> 1 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Player_Frames <> 2 Then Player_Frames = 1 Frame_Timer = Frame_timer + 1 Taste = 1 EndIf EndIf ;und für die anderen Tasten... If KeyDown(200) If map(Player_X#,Player_Y#-0.1) < 4 Then ;Oben Y2 = Y2 + 3 ;: Player_Y# = Player_Y# - 0.1 If Frames = 0 And Frame_Timer > 20 And Taste = 2 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Frames = 0 And Frame_Timer > 0 And Taste <> 2 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Player_Frames <> 5 Then Player_Frames = 4 Frame_Timer = Frame_timer + 1 Taste = 2 EndIf EndIf If KeyDown(205) If map(Player_X#+0.2,Player_Y#) < 4 Then ;Rechts X2 = X2 - 3 ;: Player_X# = Player_X# + 0.1 If Frames = 0 And Frame_Timer > 20 And Taste = 3 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Frames = 0 And Frame_Timer > 0 And Taste <> 3 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Player_Frames <> 7 Then Player_Frames = 6 Frame_Timer = Frame_timer + 1 Taste = 3 EndIf EndIf If KeyDown(203) If map(Player_X#-0.3,Player_Y#) < 4 Then ;Links X2 = X2 + 3 ;: Player_X# = Player_X# - 0.1 If Player_Frames > 10 Then Player_Frames = 10 If Frames = 0 And Frame_Timer > 20 And Taste = 4 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Frames = 0 And Frame_Timer > 0 And Taste <> 4 Then Player_Frames = Player_Frames + 1 : Frames = 1 : Frame_timer = 0 If Player_Frames <> 10 Then Player_Frames = 9 Frame_Timer = Frame_timer + 1 Taste = 4 EndIf EndIf Ich hoffe doch dass es so besser ist!? Sonst sagt es mir bitte ich will ja etwas dabei lernen ![]() MFG Animator |
||
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
was mir direkt auffällt ist die auflösung.
860x650 ist keine standardauflösung und wir nicht von jeder grafikkarte im vollbildschirm unterstützt (wird sie überhaupt von einer unterstützt ?) solltest du also vorhaben dein spiel jemals im vollbild zu spielen wähle lieber gleich eine andere auflösung, so dass du am ende aus der 2 nur eine 1 machen musst und es kann direkt losgehen ![]() naheliegende beispiele sind 800x600 und 1024x768 |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du zeichnest ja jedes mal die gesamte map, obwohl nur ein Teil davon angezeigt wird.
Außerdem kannst du For-Schleifen auch einrücken. Das gleiche gilt für If-Abfragen, diese nehmen auch mehrere Anweisungen entgegen, wenn du nach dem Then einen Zeilenumbruch machst. BlitzBasic: [AUSKLAPPEN] If cond Then Wegen der map probiere doch mal das: BlitzBasic: [AUSKLAPPEN] For X = X2 To X2+GraphicsWidth()/32 (ungetestet) Wegen der Kollisionen musst du X2 bzw. Y2 immer mit einbeziehen. Die Variablen finde ich sowieso unpraktisch benannt, scrollX und scrollY wären passender. Dass "Array Index out of bounds" vermeidest du, indem du die Variablen zwischen 0 und 40 - sichtbarer Teil hälst. Ich hoffe, dass ich dir helfen konnte. P.S. Die Variable D müsste etwas anders intalisiert werden |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würde es eher "andersherum" gestalten:
Die Maps() bleiben immer, wo sie sind und der Spieler auch. d.h wenn der Spieler auf Player_X=70 Player_Y=40 steht, dann steht er immer auf dem Map-Feld(2,1), egal welche Scrolls aktuell den Bildschirmausschnitt verschieben. Die Scroll-Werte X2 und Y2 werden nur unmittelbar vor dem Zeichnen in alle DRAW...-Befehle addiert: BlitzBasic: [AUSKLAPPEN] DrawImage Tileset , (X-X2)*32, (Y-Y2)*32, map(X, Y) so musst du dir in den Spiel-Logiken und Kollisionen keine Gedanken um das akt. Scrolling machen |
||
Animator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für die vielen Antworten (ich war ne Weile weg, deswegen kommt das erst so spät!) ich werde das ganze sofort mal testen ![]() MFG Animator |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group