Laden des Spiels

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

TheMuffi

Betreff: Laden des Spiels

BeitragMo, Jun 21, 2010 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ist vllt eine etwas blöde überschrift, aber eigentlich eine simple frage:
ich möchte jedemenge bilder laden und möchte, um es schöner zu machen am anfang zeigen, dass er grade die bilder lädt
ich habs so gemacht:

BlitzBasic: [AUSKLAPPEN]
ClsColor 0,255,0

;LADEN
Print "Please Wait for Intialising"
Print "This will only take a few seconds"

;DerRaum
wand = LoadImage("Bilder\wand.bmp")
ziel = LoadImage("Bilder\ziel.bmp")
boden = LoadImage("Bilder\boden.bmp")
key = LoadImage("Bilder\key.bmp")
schwarz_key = LoadImage("Bilder\schwarz_key.bmp")
blau_key = LoadImage("Bilder\blau_key.bmp")
gelb_key = LoadImage("Bilder\gelb_key.bmp")
rot_key = LoadImage("Bilder\rot_key.bmp")
schwarz_box = LoadImage("Bilder\schwarz_box.bmp")
blau_box = LoadImage("Bilder\blau_box.bmp")
gelb_box = LoadImage("Bilder\gelb_box.bmp")
rot_box = LoadImage("Bilder\rot_box.bmp")
man_N = LoadImage("Bilder\man_N.bmp")
man_NN = LoadImage("Bilder\man_N.bmp")
man_O = LoadImage("Bilder\man_O.bmp")
man_S = LoadImage("Bilder\man_S.bmp")
man_W = LoadImage("Bilder\man_W.bmp")
man_NW = LoadImage("Bilder\man_NW.bmp")
man_NO = LoadImage("Bilder\man_NO.bmp")
man_SW = LoadImage("Bilder\man_SW.bmp")
man_SO = LoadImage("Bilder\man_SO.bmp")
rechteck = LoadImage("Bilder\rechteck.bmp")
schalter_an = LoadImage("Bilder\schalter.bmp")
schalter_aus = LoadImage("Bilder\schalter_aus.bmp")
ende = LoadImage("Bilder\ende.bmp")
weiter = LoadImage("Bilder\weiter.bmp")
mauszeiger = LoadImage("Bilder\maus.bmp")
play = LoadImage("Bilder\go.bmp")
hintergrund = LoadImage("Bilder\hintergrund.bmp")
ScaleImage hintergrund,2,2

;VARIABLEN
x=760
y=550
keys = 0
leben = 100

Cls
Print "Bitte Taste drücken"
WaitKey()

;----------
; Menü
;----------

Cls
While Not KeyHit(28)

Color 255,0,0
Text 200,300,"To Play Game press Enter or click on the 'Play-Button'"
Text 200,310,"To Escape press Esc"


klappt aber nicht
damit er mir die letzten beiden zeilen zeigt (sprich: to play game press enter usw.) muss ich das fenster erstmal ein bisschen im bildschirm hin und her bewegen
allerdings kommts nicht von selbst
ich habe keine ahnung warum

vllt könnt ihr mir ja weiter helfen.....

Thunder

BeitragMo, Jun 21, 2010 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Fehlendes Flip?
Es wäre der Code für diese While-Schleife interessant, falls es nicht so ist.

mfg Thunder


Edit: @Totensturm: sollte nicht an den Prints liegen.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
  • Zuletzt bearbeitet von Thunder am Mo, Jun 21, 2010 21:37, insgesamt einmal bearbeitet
 

Sterbendes Lüftlein

BeitragMo, Jun 21, 2010 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt
 

Omenaton_2

BeitragDi, Jun 22, 2010 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Mische wenn es geht Print und Text (insbesondere innerhalb einer Subrutine) nicht miteinander. Nimm für alles entweder Text oder Print mit Locate. (Print benutze ich fast ausschließlich für temporäre Debug Textausgaben.)
Bei Text mußt du immer gut im Auge haben, ob du in Front- oder in den Backbuffer schreibst und dann wenn nötig die Buffer flipen.

Der gepostete Code ist nicht vollständig. Darin kann ich den eigentlichen Fehler nicht erkennen. Sollte der Code tatsächlich so enden wie in deiner Posting, dann würde der Text am Ende nur für einen Augenblick sichtbar.

Berücksichtige auch den Befehl FlushKeys(). (Obwohl in diesem Fall das wahrscheinlich nichts bringt, außer, wenn der User bei beiden Tasten-Wartebefehlen die selbe Taste drückt.)

Allerdings der Code ist etwas unschön, finde ich.
Es ist so, daß du 2 Mal hintereinander auf Tastendruck wartest. Dazwischen ist nur ein CLS. Sollte der User am Anfang Return gedrückt haben, kann es sein, daß der Text in der While Not Keyhit Schleife überhaupt nicht zum Anzeigen kommt, sondern übersprungen wird. Ich finde da paßt so eine While Not Keyhit nicht gut hin.
Ich würde lieber Repeat Forever und dann If Keyhit = ... nehmen zum Rausgehen (Baue dann aber zusätzlich noch Abfrage nach Escape Button ein. Die Leute sind es gewöhnt aus allen möglichen Warteschleifen oder Fenstern mit Escape rauskommen zu können. Das sollte auch immer gehen).

BladeRunner

Moderator

BeitragDi, Jun 22, 2010 10:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde noch weiter gehen und empfehlen Print und Input nicht mehr zu verwenden - diese Befehle sind nur noch aus Kompatibilitätsgründen in der Sprache, widersprechen aber dem Aufbau moderner Grafikhardware und sollten daher ersetzt werden.
Print kann man durch Text ersetzen, für Input gibt es hier im Codearchiv schöne alternativen.

Desweiteren bedenke dass Du für ein sinnvolles Anzeigen der Texte Doublebuffering benötigst, d.h. die Zeichenfläche muss regelmässig ausgetauscht werden. Dies erreichst Du mittels flip
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
 

TheMuffi

BeitragDi, Jun 22, 2010 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
@Thunder also ein flip hab ich auf jeden fall, ist ja erst der anfang des spiels
@Bladerunner ich soll also wenn er geladen hat nochmal flip setzten oder wie?
@Omenaton_2 ich hab noch keine ahnung was flushkeys bringt, vllt könnst du mich ja aufklären. ich habs zumindest nicht in der hilfe gefunden

@Totensturm super, auf jeden fall lädt es jetzt den anfang
allerdings lädt er dann nicht weiter, also mien nächstes problem

BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,32,0
SetBuffer BackBuffer()

AppTitle "Prison Escape";mir viel fürs erste nichts besseres ein

ClsColor 0,255,0

;LADEN
Text 0,0,"Please Wait for Intialising"
Text 0,10,"This will only take a few seconds"

;DerRaum
wand = LoadImage("Bilder\wand.bmp")
;und so weiter und so fort, das kennt ihr ja...

;VARIABLEN
x=760
y=550
keys = 0
leben = 100

go=0
an=1

Cls
Text 0,0,"Bitte Taste drücken"
WaitKey()

;----------
; Menü
;----------

Cls
While Not KeyHit(28)

Color 255,0,0
Text 200,300,"To Play Game press Enter or click on the 'Play-Button'"
Text 200,310,"To Escape press Esc"

If go=0 Then DrawBlock hintergrund,0,0
If go=0 Then DrawBlock play,200,400
If go=0 Then DrawBlock ende,400,400

HidePointer
DrawImage mauszeiger,MouseX(),MouseY()
MaskImage mauszeiger,255,255,255
ScaleImage mauszeiger,0.5,0.5

If ImagesCollide(mauszeiger,MouseX(),MouseY(),0,play,200,400,0) And MouseHit(1) Then
go=1
EndIf
If KeyHit(28) Then
go=1
EndIf

;Ende
If ImagesCollide(mauszeiger,MouseX(),MouseY(),0,ende,400,400,0) And MouseHit(1) Then
End
EndIf

If KeyHit(1) Then
End
EndIf

Wend

Repeat
;Blablabla der ganze spielaufbau.....
;und noch der schluss

Text 690,10,"Schlüssel: " + keys

Flip
Until KeyHit(1)
End

wenn ich nach dem "Bitte Taste drücken" eine Taste drücke beendet das programm
wenn die antwort einfach ist, sory, ich bin ja noch ein totaler noob

Midimaster

BeitragDi, Jun 22, 2010 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
schreib doch einfach ein paar DEBULOGs zur Kontrolle rein. Dann weißt Du, wie weit dein Code gelaufen ist und kannst so den Fehler eingrenzen. Beispiele:
BlitzBasic: [AUSKLAPPEN]
....
Text 0,0,"Bitte Taste drücken"
WaitKey()

;----------
; Menü
;----------
DebugLog " vor dem While"
Cls
While Not KeyHit(28)
Color 255,0,0
Text 200,300,"To Play Game press Enter or click on the 'Play-Button'"
Text 200,310,"To Escape press Esc"

DebugLog "vor dem IFs"

If go=0 Then DrawBlock hintergrund,0,0
If go=0 Then DrawBlock play,200,400
If go=0 Then DrawBlock ende,400,400

DebugLog " vor dem Mauszeiger"
HidePointer
DrawImage mauszeiger,MouseX(),MouseY()
MaskImage mauszeiger,255,255,255
ScaleImage mauszeiger,0.5,0.5

DebugLog " vor dem Collide"

If ImagesCollide(mauszeiger,MouseX(),MouseY(),0,play,200,400,0) And MouseHit(1) Then
go=1
EndIf
If KeyHit(28) Then
go=1
EndIf
.....

So ein DEBUGLOG gibt dann im sog. DEBUG-Fenster eine Meldung aus. Den Menüpunkt "DEBUGGER" in BB einschalten! Die DEBUGLOGs bleiben während der gesamten Code-Erstellung immer im Programm und werden erst im fertigen Produkt entfernt. Dieser Praxis-Tipp wird dir in Zukunft viel Ärger bei der Fehlersuche ersparen.

Siehe mein "Fehler suchen Tutorial" https://www.blitzforum.de/foru...hp?t=33510

Thunder

BeitragDi, Jun 22, 2010 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sage doch: fehlendes Flip!
BlitzBasic: [AUSKLAPPEN]
While Not KeyHit(28)

Color 255,0,0
Text 200,300,"To Play Game press Enter or click on the 'Play-Button'"
Text 200,310,"To Escape press Esc"

If go=0 Then DrawBlock hintergrund,0,0
If go=0 Then DrawBlock play,200,400
If go=0 Then DrawBlock ende,400,400

HidePointer
DrawImage mauszeiger,MouseX(),MouseY()
MaskImage mauszeiger,255,255,255
ScaleImage mauszeiger,0.5,0.5

If ImagesCollide(mauszeiger,MouseX(),MouseY(),0,play,200,400,0) And MouseHit(1) Then
go=1
EndIf
If KeyHit(28) Then
go=1
EndIf

;Ende
If ImagesCollide(mauszeiger,MouseX(),MouseY(),0,ende,400,400,0) And MouseHit(1) Then
End
EndIf

If KeyHit(1) Then
End
EndIf

Wend

Du hast eine While-Schleife in der du zeichnest, bis Enter gedrückt wird. Aber, das gezeichnete bekommt kein Mensch zu sehen, weil du Flip nicht verwendest. Cls gehört dann natürlich auch rein.

Zitat:
wenn ich nach dem "Bitte Taste drücken" eine Taste drücke beendet das programm

Das sollte nur passieren, wenn du die Entertaste drückst. Wenn du Enter drückst bekommt auch die Schleife noch den Enter-Tastendruck und wird übersprungen.
Ein "totaler Noob" (Zitat) könnte sich auch etwas leichteres Suchen als Image-Kollisionen.

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

TheMuffi

BeitragDi, Jun 22, 2010 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach so, ja stimmt! Vielen Dank

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group