Seite 1 von 2
Screen soll doch noch nicht geschlossen werden ...
Verfasst: 29.03.2008 20:27
von Tombi
Hallo liebe Community,
arbeite seit gestern-abend an einem RPG.
Hier mal die Main.pb:
Code: Alles auswählen
;Init
InitSprite()
InitKeyboard()
InitMouse()
;Includes
IncludeFile "befehle.pb"
OpenScreen(640,480,32,"RPG")
LoadSprites()
Repeat
ExamineKeyboard()
ShowLandschaft(4,4)
Delay(1)
Until KeyboardPushed(#PB_Key_Down)
Nun, das Problem liegt in der ShowLandschaft() die über die includete Datei "Befehle.pb" kommt:
Code: Alles auswählen
Procedure ShowLandschaft(zeilen.l,werte.l)
;Mir fällt gerade auf das hier ja in jedem Tick
;neu dimensioniert wird ^^
Dim map.b(zeilen,werte)
ClearScreen(0,0,0)
For x=0 To zeilen-1
For y=0 To werte-1
Read map(x,y)
;hier, der spuckt nach `ner Zeit `ne merkwürdige Zahl raus:
Debug map(x,y)
DisplaySprite(map(x,y),x*25,y*25)
Next
Next
FlipBuffers()
Delay(1)
EndProcedure
Debug map(x,y) spuckt mir nach einigen Durchläufen eine merkwürdige Zahl raus.
Wenn ich "Data.b" angebe kommt die Zahl 97 nach einer Weile, bei Data.l (und aufwärts) kommen ziemliche hohe merkwürdige Zahlen.
Aber erst nach einigen Durchläufen?!
Verfasst: 29.03.2008 22:26
von #NULL
soll da vielleicht die map-data hin?
die map brauchst du eigentlich auch nur einmal laden (Read). bzw ansonsten brauchst du natürlich auch ein Restore pro frame..
<edit>
und wo ist eigentlich flipbuffer()

Verfasst: 29.03.2008 23:06
von PMV
1. Hilfe zu sämtlichen PB-Befehlen durchlesen
2. Beispielprogramme in dem Examples-Ordner von PB durcharbeiten
(sind meist in der Hilfe direkt unter der Hilfe zu den Befehlen verlinkt)
3. Programm selber überarbeiten und bei Fragen dannach noch mal stellen
MFG PMV
Verfasst: 30.03.2008 11:16
von Tombi
#NULL hat geschrieben:
soll da vielleicht die map-data hin?
die map brauchst du eigentlich auch nur einmal laden (Read). bzw ansonsten brauchst du natürlich auch ein Restore pro frame..
<edit>
und wo ist eigentlich flipbuffer()

map(x,y) war schonmal drinne, hatte ich aus Testgründen raugemacht.
Kommt natürlich gleich wieder rein
Ah, FlipBuffers() fehlt
Huch, wenn ich gerade in meinen Code schaue ist FlipBuffers schon drinne
Habe auch oben mal den Code angepasst.
Habe immernoch das gleiche Problem 
Verfasst: 30.03.2008 11:24
von Andreas_S
Da feht ja alles...
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenScreen(640,480,32,"RPG")
Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
ShowLandschaft(5,4)
FlipBuffers()
Delay(1)
Until KeyboardPushed(#PB_Key_Escape)
Verfasst: 30.03.2008 11:32
von Tombi
Andreas_S hat geschrieben:Da feht ja alles...
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenScreen(640,480,32,"RPG")
Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
ShowLandschaft(5,4)
FlipBuffers()
Delay(1)
Until KeyboardPushed(#PB_Key_Escape)
Das steht in der Befehle.pb ganz oben, stimmt, sollte ich mal in die Main reinschmeißen
Habe oben den ersten Beitrag mal komplett neu geschrieben, da mir was aufgefallen ist, woran es liegen könnte?!
Verfasst: 30.03.2008 11:44
von #NULL
und was is mit dem nötigen 'Restore' von dem ich geredet hatte?
bzw wie gesagt: lade deine map lieber nur einmal mit Read vor der hauptschleife!
Verfasst: 30.03.2008 13:11
von Tombi
Jetzt ließt er mir nur noch die erste Zeile
Code: Alles auswählen
Procedure Reading(zeilen.l,werte.l)
Dim map.b(zeilen,werte)
Restore karte
For x=0 To zeilen-1
For y=0 To werte-1
Read map(x,y)
Next
Next
EndProcedure
Procedure ShowLandschaft(zeilen.l,werte.l)
ClearScreen(0,0,0)
For x=0 To zeilen-1
For y=0 To werte-1
DisplaySprite(map(x,y),x*25,y*25)
Next
Next
FlipBuffers()
Delay(1)
EndProcedure
Reading() wird vor dem Repeat aufgerufen:
Code: Alles auswählen
;Init
InitSprite()
InitKeyboard()
InitMouse()
;Includes
IncludeFile "befehle.pb"
OpenScreen(640,480,32,"RPG")
LoadSprites()
Reading(4,4)
Repeat
ExamineKeyboard()
ShowLandschaft(4,4)
Delay(1)
Until KeyboardPushed(#PB_Key_Down)
Und die DataSection:
Code: Alles auswählen
DataSection
karte:
Data.l 1,2,2,2
Data.l 2,2,2,2
Data.l 3,3,3,3
Data.l 4,4,4,4
EndDataSection
Verfasst: 30.03.2008 13:38
von #NULL
bisschen komisch, den x ist eigentlich die spalte ..hauptsache du weißt was du machst.
und map() ist global?
man kann nur raten bei den code-brocken. haste nicht was halbwegs lauffähiges?
benutzt du EnableExplicit? könnte ja auch sein dass du deine x/y zähler der schleifen irgendwo doppelst oder global/local verhaust und dann deine schleifen spinnen..
<edit>
achso:
das wird nix. verwende den gleichen typ!
..und du scheinst auch PB <4.00 zu verwenden. sowas sagt man lieber gleich dazu.
Verfasst: 30.03.2008 13:44
von Kaeru Gaman
map() ist nicht Global
Code: Alles auswählen
Procedure Reading(zeilen.l,werte.l)
Dim map.b(zeilen,werte)
es ist ja schön und gut, dass du so viel wie möglich in procedures packen willst.
aber du musst dir dabei auch im klaren sein, welchen gültigkeitsbereich deine variablen haben.
und ich hab dir in dem anderen thread schon mal gesagt, dass du das
Clearscreen und das FlipBuffers besser nicht in die Landschaft-Procedure packen solltest.
irgendwann willst du auch noch chars darstellen, dafür schreibst du wieder ne procedure, und dann klappt garnix mehr.
und das mit dem Read außerhalb der Darstellungsschleife hatte ich dir auch schon gesagt.
und wieso machst du eigentlich zum selben Grundprogramm nen zweiten thread auf?
ich muss PMV echt beipflichten:
PMV hat geschrieben:1. Hilfe zu sämtlichen PB-Befehlen durchlesen
2. Beispielprogramme in dem Examples-Ordner von PB durcharbeiten
(sind meist in der Hilfe direkt unter der Hilfe zu den Befehlen verlinkt)
3. Programm selber überarbeiten und bei Fragen dannach noch mal stellen