Schwarzes Bild

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Raiden93

Betreff: Schwarzes Bild

BeitragMi, Okt 20, 2010 4:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,
ich habe mich das schon bei einigen meiner Projekte gefragt,und versucht heraus zu finden,warum immer ein Schwarzes Bild kommt.Wenn ich bei meinen Spielen erst auf Spiel Starten gehe und dann per ESC wieder in mein Menü wechsel.

Hier ein Beispiel Code:
Code: [AUSKLAPPEN]
AppTitle "Beispiel Code"
Graphics 800,600,32,2
SetBuffer BackBuffer()
Global FPSTimer = CreateTimer(60)
HidePointer


;Laden von Datein
Global GFX_HinterGrund = LoadImage("GFX/HinterGrund.bmp")
Global GFX_Button_SpielStarten = LoadImage("GFX/Button_SpielStarten.bmp")
Global GFX_Button_Optionen = LoadImage("GFX/Button_Optionen.bmp")
Global GFX_Button_Beenden = LoadImage("GFX/Button_Beenden.bmp")
Global GFX_Spiel = LoadImage("GFX/Spiel.bmp")
Global GFX_Maus = LoadImage("GFX/Maus.bmp")

MaskImage GFX_Button_SpielStarten,255,255,255
MaskImage GFX_Button_Optionen,255,255,255
MaskImage GFX_Button_Beenden,255,255,255
MaskImage GFX_Maus,255,255,255

;Allgemeine Variablen
Global Modus = 1



;Cache Variablen
Global MH

Repeat
   Cls
   MH = MouseHit(1)
   Modus_Function()
   Kollision_Function()
   
   
   Flip 0
Until Modus = 4


Function Modus_Function()
    Select Modus
      Case 1 ;Hauptmenu
          DrawImage GFX_HinterGrund,0,0
         DrawImage GFX_Button_SpielStarten,225,130
         DrawImage GFX_Button_Optionen,225,280
         DrawImage GFX_Button_Beenden,225,430
         DrawImage GFX_Maus,MouseX(),MouseY()
      Case 2 ;Spiel
         DrawImage GFX_Spiel,0,0
         
         If KeyHit(1)
            Modus = 1
         End If
      Case 3 ;Optionen
         
      Case 4 ;Beenden
   End Select
End Function

Function Kollision_Function()
   If ImagesCollide(GFX_Maus,MouseX(),MouseY(),0,GFX_Button_SpielStarten,225,130,0) And MH
      Modus = 2
   End If
End Function


MFG:
Raiden93/Kevin

Dottakopf

BeitragMi, Okt 20, 2010 9:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,


auf den ersten blick fällt mir folgendes auf.

du erstellst einen timer, rufst diesen aber nie ab was bei flip 0 auf manchen rechnern zu sehr unlustigen ergebnissen führen kann.

also irgendwo in der hauptschleife ein Waittimer( timerbez. ) schreiben.

meine Vermutung wegen dem Schwarzen Hintergrund:
- die Grafik des menüs ist komplett schwarz oder in einer mask farbe Rolling Eyes
- du springst in den falschen menüstatus und es wird nix angezeigt

ganz erhlich ich sehe keinen logischen fehler im code....


Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

hazumu-kun

BeitragMi, Okt 20, 2010 9:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schau mir das grade mal an.

Mit den entsprechenden Bilddateien könnte ich dann sogar den Debugger anmachen, aber jetzt muss ich alles durchlesen...

Zitat:
Graphics 800,600,32,2

Die Angabe zur Farbtiefe kannst du dir im Fenstermodus sparen, es wird eh auf Desktop-Farbtiefe umgestellt.

Zitat:
Global GFX_[...] = LoadImage("GFX/[...].bmp")

Bitmaps solltest du der Dateigräße wegen nicht verwenden, hier ist PNG besser (falls du die Vollversion besitzt).
Tipp am Rande:
Sämtliche Befehle die Dateieingabe bekommen, achten beim Pfad nicht auf Groß/Kleinschreibung.

Zitat:
MaskImage GFX_Maus,255,255,255

Das macht mich stutzig.
Haben Mauszeiger nicht normalerweise ein weißes Design?
Generell eignen sich zum Masken eher Farben die man niemals in den betreffenden Grafiken verwendet hat/verwenden würde, z.B. 255,0,127 (Magenta).

Zitat:
Repeat
Cls
MH = MouseHit(1)
ModusFunction()
KollisionFunction()
Flip 0
Until Modus = 4

Wie mein Vorposter schon schrieb: Du erstellst einen Timer für die fps und benutzt diesen nichtmehr. Dann versucht dein Rechner die hardwaretechnisch maximal mögliche Framerate rauszuhauen.
Bau nach dem Flip ein Waittimer ein.
Siehe auch: Hurra, 100 % Auslastung

Zitat:
ImagesCollide(GFX_Maus,MouseX(),MouseY(),0,GFX_Button_SpielStarten,225,130,0)

Das erzeugt auf manchen Grafikkarten eine Memory-Access-Violation, wenn dein button annähernd rechteckig sein sollte, dann bastel dir selber eine Kollision, da reichen für Rechtecke schon ein paar Ifs die über die Mauskoordinaten feststellen ob die Maus im Bereich des Buttons ist.


Ansonsten sehe ich keine Fehler die dein Problem erklären würden.
Prüf die Maskfarben nochmal im Bild und Code nach und mach bei dir den Debugger an und benutze seine Befehle(Stop, Debuglog).
  • Zuletzt bearbeitet von hazumu-kun am Mi, Okt 20, 2010 10:12, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMi, Okt 20, 2010 10:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Man reduziere den Code auf ein lauffähiges Minimum:
BlitzBasic: [AUSKLAPPEN]
AppTitle "Beispiel Code"
Const gfx_w=800, gfx_h=600
Graphics gfx_w,gfx_h,32,2
SetBuffer BackBuffer()
Global FPSTimer = CreateTimer(60)
;Laden von Datein

;Allgemeine Variablen
Global Modus = 1

;Cache Variablen
Global MH

Repeat
Cls
MH = MouseHit(1)
Modus_Function()
Kollision_Function()


Flip 0
WaitTimer(FPSTimer)
Until Modus = 4


Function Modus_Function()
Select Modus
Case 1 ;Hauptmenu
Text(gfx_w/2, gfx_h/2, "MENÜ")
Case 2 ;Spiel
Text(gfx_w/2, gfx_h/2, "SPIEL")

If KeyHit(1)
Modus = 1
End If
Case 3 ;Optionen

Case 4 ;Beenden
End Select
End Function

Function Kollision_Function()
If MH Then
Modus = 2
End If
End Function

...und er funktioniert wunderbar.
Arrow DebugLog, Stop
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragMi, Okt 20, 2010 11:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ups,da habe ich doch ehrlich vergessen den Timer einzusetzen.Ich bedanke mich für die nützlichen Tipps.Sollte ich weiterhin das Problem haben,werde ich die Komplette BB hochladen und euch so zu Verfügung stellen.
Ich werde jetzt die Grafiken erstmal auf 255,0,255 um Texturieren.
Und sämtliche Verbesserungen einbauen.

EDIT:
Ich habe den Fehler Gefunden.
Ich habe das Spiel mal im Fullscreen Modus gestartet,und bemerkt das es so geht.
Danach habe ich einfach die Grafik(Graphics 801,601,0,2) gestellt um aus zu Probieren ob es geht.
Und es geht.Also liegt der Fehler darin das Mein Bild(800,600) nicht in einer 800,600 Grafik passt,und somit zwar am Anfang die Grafik Perfekt dargestellt wird,dennoch bei wiederholtem abrufen,einen Schwarzen Screen hervorhebt.
Hätte jemand eine Idee? oder bin ich jetzt gezwungen meine Bilder auf 799,799 zu stellen?


MFG:
Raiden93/Kevin

ozzi789

BeitragMi, Okt 20, 2010 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
hä?
klar kannst du ein 800 600 bild in einem 800 600 bild darstellen, du hast da noch nen fehler irgendwo.
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Dottakopf

BeitragMi, Okt 20, 2010 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
gehen wir doch mal zusammen durch..


- Das Spiel läuft im Full screen ?
- beim Start des Spiel wird die 800x600 hintergrund Grafik korrekt angezeigt?
- das besagte bild "verschwindet" wenn du vom Spiel (mode =1 ) auf Hauptmenü (mode = 2 ) schaltest ?


die Grafikauflösung hat in der Regel nichts mit der Darstellung von Grafiken(nicht scalliert...) zu tun. Auflösung 300x200 kann auch ein 1024x800 großes bild zeigen. Halt nur einen ausschnitt.


Der Fehler liegt wo anders.
Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Raiden93

BeitragMi, Okt 20, 2010 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Mag schon sein das der Fehler woanders liegt^^.Tatsache ist das es im Fullsceen geht und im Fenstermodus,zeigt er einen Blackscreen wenn ich von Modus 1 in 2 wechsel und von 2 wieder auf 1 also wieder ins Hauptmenü.
Mache ich die Settings aber auf 801,601 geht es auch im Fenstermodus.
Das ist aber ein wenig verwirrend und stellt mir die Frage ob es überhaupt richtig ist,Menüs in Case Bedingungen auf zu stellen.Dies dürfte aber nicht der Fall sein ,soweit ich weis.

MFG:
Raiden93/Kevin

Dottakopf

BeitragMi, Okt 20, 2010 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
doch menüs mit case bedingungen ist soweit ok, und ich denke auch mal die gängige Methode.

wenn du sagst es geht nur mit diesen settings, dann kann ich mir irgendwie nur noch vorstellen das es da ein problem zwischen deiner graka und bb gibt. Evt. mal rechner neu starten ? oder mal eine andere 800x600 Grafik verweden.

Hatte schonmal den bug das sich eine Exe ohne angesteckte maus bzw tastatur über eine Remoteverbindung durch das Netz nicht starten ließ. Shocked

das kann manchmal das banalste überhaupt sein

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Raiden93

BeitragMi, Okt 20, 2010 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
In anderen Auflösungen geht es ja.Ist ja auch klar weil meine Bilder nur 800x600 groß sind.Aber ist mein Bild Großer als die Auflösung gibt es ein Blackscreen ich lade eben mal mein Game mit BB und Grafik hoch.


EDIT:
Hier die BB:
https://www.blitzforum.de/upload/file.php?id=9685

Xeres

Moderator

BeitragMi, Okt 20, 2010 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Lösung ist mehr als Simpel:

Anstatt:
BlitzBasic: [AUSKLAPPEN]
WaitTimer(FPSTimer)    
Flip 0

Muss es heißen:
BlitzBasic: [AUSKLAPPEN]
Flip 0
WaitTimer(FPSTimer)


Erst fertig zeichnen, dann warten - dann hat BB auch Zeit alles zu zeichnen.
(Sollte vielleicht nicht so sein, aber ist bei mir so.)
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

count-doku

BeitragMi, Okt 20, 2010 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

bei mir läuft dein Beispielprogramm ohne Probleme.

@Xeres, ich glaube nicht, dass das einen Unterschied macht,
weil BB ja vorher schon alles in den BackBuffer gemalt hat.
Flip tauscht doch nur Front- und BackBuffer.

Ich verwende immer diese Konstruktion und bei mir ging sie bis jetzt immer.
(Glaube auch bei allen Testern)
BlitzBasic: [AUSKLAPPEN]
While Not KeyHit(1)
Cls
;Malen
WaitTimer(timer)
Flip 0
Wend


mfg,
count-doku

Xeres

Moderator

BeitragMi, Okt 20, 2010 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir macht es einen Unterschied. Wo da das Problem liegt, ist mir nicht ganz klar. Wenn ich ein paar Debuglogs einfüge, funktioniert es auch (dann nur im Debug-Modus), vielleicht, weil alle Zeichenanweisungen genug zeit abbekommen haben...
Auf welchem Betriebsystem läuft es denn bei dir, count-doku?
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragMi, Okt 20, 2010 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres du hast vollkommen recht.Jetzt geht es nachdem ich den Timer nach dem Flip gesetzt habe danke Wink.

MFG:
Raiden93/Kevin

count-doku

BeitragMi, Okt 20, 2010 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Komisch dass es bei euch nur so läuft.
Ich habe Windows XP

count

Xeres

Moderator

BeitragMi, Okt 20, 2010 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Schlechtere Emulierung von DX7 unter Windows7?
BlitzBasic wird halt immer älter und läuft bald nur noch auf Krücken...

Nachtrag:
The latest release versions of DirectX, DirectX 10 and DirectX 9Ex, are exclusive to Windows Vista. Microsoft claims the reason for this is that there have been extensive changes in the Windows graphics architecture and introduction of the Windows Display Driver Model.
oldversion.com/DirectX
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Dottakopf

BeitragMi, Okt 20, 2010 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
cool die DX7 hole ich mir in meine sammlung. wer weis die könnt ich evt. noch brauchen für die Zukunft Cool
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group