Problem mit Game

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Blackdragon1989

Betreff: Problem mit Game

BeitragFr, Feb 03, 2006 0:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe ein Problem mit dem ich mich schon seit einem Tag rum ärgere aber einfach keine Lösung finde...
Ich hatte das das Spiel im Meü startet, im Menü sind 3 Bilder(Spiel starten,Steuerung und Beenden) wenn ich jetzt zuerst auf Steuerung klicke dann kommt die Steuerung(was ja so sein soll)aber wenn ich aus der Steuerung zurück ins Hauptmenü gehe und dann auf Spiel starten klicke beendet das Programm, jedoch wenn ich zuerst auf Spiel starten klicke startet das Spiel ganz normal.
Hier der Code vom Spiel an sich
Code: [AUSKLAPPEN]

Graphics 640,480,16,1
SetBuffer = BackBuffer()
HidePointer()
;Variablen laden beginn
Bg = LoadImage("background.jpg")
Fk = LoadImage("Fadenkreuz.bmp")
Fz = LoadAnimImage("Flugzeug.bmp" ,104 ,31 ,0 ,2)
X_Fz = 640
Frame_Fz = 0
Tp = LoadImage("Panzer.bmp")
X_Tp# = 640
;Variablen laden ende

While Not KeyHit(1)

;Pause Menü Beginn
If KeyDown(197) Or KeyDown(25) Then
  pause = LoadImage("Pause.bmp")
  MaskImage pause, 0,0,255
  DrawImage pause,50,100
  WaitKey   
 EndIf
;Pause Menü ende

;Frame für Flugzeug
Frame_Fz = Frame_Fz + 1
If Frame_Fz = 2 Then Frame_Fz = 0
;Frame für Flugzeug ende

X_Fz = X_Fz - 1
X_Tp# = X_Tp# - 0.5
TileImage Bg
MaskImage Tp,0,0,255
DrawImage Tp,X_Tp,450
MaskImage Fz,0,0,255
DrawImage Fz, X_Fz,50,Frame_Fz
MaskImage Fk,0,0,255
DrawImage Fk,MouseX()-25,MouseY()-25
Flip
Wend

das Menü
Code: [AUSKLAPPEN]

Graphics 640,480,16,1
SetBuffer BackBuffer()
HidePointer
Hintergrund = LoadImage("Menü.bmp")
start = LoadImage("start.bmp")
Ctrl = LoadImage("Steuerung.bmp")
Ende = LoadImage("beenden.bmp")
Fk = LoadImage("fadenkreuz.bmp")
While Not KeyHit(1)
Cls 
TileImage Hintergrund
;Start
DrawImage start,220,200
If ImagesCollide(Fk,MouseX()-25,MouseY()-25,0,start,220,200,0)
 If MouseHit(1)
  Include "2D_Shooter.bb"
  Exit
 EndIf
EndIf
;Start

;Steuerung
DrawImage Ctrl,220,250
If ImagesCollide(Fk,MouseX()-25,MouseY()-25,0,Ctrl,220,250,0)
 If MouseHit(1)
  Include "Steuerung.bb"
  Exit
 EndIf
EndIf

;Steuerung

;Beenden
DrawImage Ende,220,300
If ImagesCollide(Fk,MouseX()-25,MouseY()-25,0,Ende,220,300,0)
 If MouseHit(1)
  Exit
 EndIf
EndIf
;Beenden
MaskImage Fk,0,0,255
DrawImage Fk,MouseX()-25,MouseY()-25
Flip
Wend

und das Steuerungs menü
Code: [AUSKLAPPEN]

Graphics 640,480,16,1
SetBuffer BackBuffer ()
HidePointer
Fk = LoadImage("fadenkreuz.bmp")
pic = LoadImage("Ctrl.bmp")
Ende = LoadImage("back.bmp")

While Not KeyHit(1)
Cls
TileImage pic
DrawImage Ende ,210 ,420
If ImagesCollide(Fk , MouseX()-25 ,MouseY()-25 ,0 ,Ende ,210 ,420 ,0)
 If MouseHit(1)
 Include "Menü.bb"
 Exit
 EndIf
EndIf
MaskImage Fk ,0,0,255
DrawImage Fk ,MouseX()-25 ,MouseY()-25
Flip
Wend
 
Include"Menü.bb"
Exit

Ich hoffe jemand kann mir helfen...
User posted image

Hubsi

BeitragFr, Feb 03, 2006 9:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code ist gespickt mit ganz typischen Fehlern von Einsteigern Very HappyCode: [AUSKLAPPEN]
pause = LoadImage("Pause.bmp")
MaskImage pause, 0,0,255
LoadImage und Maskimage haben nichts in einer Hauptschleife zu suchen, auch nicht in der gegebenen Konstellation Very Happy Und zwar aus dem ganz einfachen Grund das jede geladenene Resource einen gewissen Speicherplatzbedarf hat und wenn diese Resource nun öfter in den Speicher geladen wird auch mehrmals dort vorhanden ist, unsinnigerweise Very Happy

Include bindet den Code so ein als hätte er schon immer an der Stelle gestanden. Entsprechend hast Du auch mehrmals Graphics im Code. Das wird zum einen den Spieler später nerven, weil niemand dieses rumgeflackere gerne haben will und hat den Nebeneffekt das alle in diesem Programm geladenen oder erstellten Grafiken aus dem Speicher entfernt werden. Der Rest ist dann eine Milchmädchenrechnung Very Happy

MouseHit() sollte pro Schleifendurchlauf nur einmal aufgerufen werden. In gegebenem Code würde es zwar funkionieren, aber es ist eine schlechte Angewohnheit und wird früher oder später zu Problemen führen. Ein Aufruf von MouseHit() leert nämlich den Buffer (was Buffer sind und wo sie überall vorkommen wird auf www.blitzbase.de sehr schön erklärt) und ein weiterer Aufruf wird False zurückgeben. Darum macht es Sinn den Wert in einer Variable zwischenzuspeichern und mit dieser zu arbeiten, ala mh=MouseHit(1) oder dergleichen Very Happy

In diesem Sinne, tret den bestehenden Code in die Tonne und schreibs nochmal mit Struktur. Mit der jetzigen Vorgehensweise wirst Du ausser Enttäuschungen auf Deiner Seite nicht viel ernten Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Blackdragon1989

BeitragFr, Feb 03, 2006 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
ok ich werde den Code mal umstruckturieren aber diese konstellations Fehler haben nichts damit zu tun das das Spiel abkackt oder ?
Und wegem den Flackern...wie könnte ich dann sonst machen ausser mit include, einfach nur da wo include steht den code reinhauen oder wie ?

Edit:
Also ich hab das mit dem mh = Mousehit(1) mal ausprobiert aber da kann ich klicken wie ich will da passiert einfach nichts.
User posted image

Hubsi

BeitragFr, Feb 03, 2006 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Also ich hab das mit dem mh = Mousehit(1) mal ausprobiert
Es passiert in dem Sinnne schon was, nämlich das die Variable mh den Wert 1 (also True) annimmt Very Happy (Um nicht lustigen Späßen und der allerlei vorzubeugen: Es wird genaugenommen die Anzahl Klicks zurückgegeben die seit dem letzten Aufruf gemacht worden sind Mr. Green) Und diese Variable mh kannst Du dann in If-Konstruktionen usw. verwenden:Code: [AUSKLAPPEN]
If mh Print "Ist ja cool :D"


Include zu verwenden ist eine imho eine gute Möglichkeit Codes übersichtlich zu halten und von daher zurecht beliebt. Nur habe ich den Eindruck Du hast die Funktionsweise missverstanden Very Happy Für den Compiler ist dieser Code:Code: [AUSKLAPPEN]
; Datei main.bb
Graphics 640,480,32,1
SetBuffer BackBuffer()

Repeat
Cls
Oval 100,100,60,30,1
Flip
Until KeyHit(1)
völlig identisch mit diesem:
Code: [AUSKLAPPEN]
; Datei main.bb
Graphics 640,480,32,1
SetBuffer BackBuffer()

Repeat
Cls
Include "oval.bb"
Flip
Until KeyHit(1)



; Datei oval.bb
Oval 100,100,60,30,1
Include wird also durch den Code in anderen Datei einfach ersetzt und erst dann wird das Programm kompiliert Very Happy

Und das abkacken an sich kommt schlicht daher das Graphics den Grafikspeicher ausleert und somit die Fadenkreuz-Grafik dem ImagesCollide im Menü nicht mehr zur Verfügung steht. Wird sich aber alles geben wenn Du den Ratschlag von eben beherzigst Mr. Green
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Blackdragon1989

BeitragSa, Feb 04, 2006 0:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah danke jetzt geht´s !
User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group