Screen soll doch noch nicht geschlossen werden ...

Anfängerfragen zum Programmieren mit PureBasic.
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Screen soll doch noch nicht geschlossen werden ...

Beitrag 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?!
Zuletzt geändert von Tombi am 30.03.2008 11:37, insgesamt 3-mal geändert.
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Code: Alles auswählen

DisplaySprite(1.. ?
soll da vielleicht die map-data hin? :wink:

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() :roll:
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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

:D

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Beitrag von Tombi »

#NULL hat geschrieben:

Code: Alles auswählen

DisplaySprite(1.. ?
soll da vielleicht die map-data hin? :wink:

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() :roll:
map(x,y) war schonmal drinne, hatte ich aus Testgründen raugemacht.
Kommt natürlich gleich wieder rein :allright:

Ah, FlipBuffers() fehlt :roll:
Huch, wenn ich gerade in meinen Code schaue ist FlipBuffers schon drinne :freak:
Habe auch oben mal den Code angepasst.

Habe immernoch das gleiche Problem :(
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag 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)
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Beitrag 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?!
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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!
my pb stuff..
Bild..jedenfalls war das mal so.
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Beitrag 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
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Code: Alles auswählen

For x=0 To zeilen-1
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:

Code: Alles auswählen

dim map.b(..)
data.l ..
read map(..)
das wird nix. verwende den gleichen typ!

..und du scheinst auch PB <4.00 zu verwenden. sowas sagt man lieber gleich dazu.
Zuletzt geändert von #NULL am 30.03.2008 13:45, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten