2 komische Fehler im Hauptmenü

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Lord AdZ

Betreff: 2 komische Fehler im Hauptmenü

BeitragMi, Apr 11, 2007 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab zwei komische Fehler in meinem Hauptmenü und schaffs einfach nicht, die Ursache dafür zu finden.

1. Fehler: Wenn ich im Hauptmenü auf Spiel starten klicke (wenigstens das klappt), soll eine Abfage erscheinen (klappt auch), wo man mit Ja oder Nein antworten kann. Wenn man auf Ja klickt, soll das Spiel gestartet werden, wenn man auf Nein klickt, wird das Handbuch geöffnet und das Spiel beendet. Der Fehler liegt darin, dass das Spiel startet oder endet, wenn ich mit der Maus das Ja oder Nein berühre, die Function soll aber erst starten, wenn ich auf Ja oder Nein klicke.

2. Fehler: Wenn ich im Hauptmenü auf Optionen klicke, soll man die Grafikeinstellungen ändern können. Der Fehler liegt darin, das wenn ich auf Optionen klicke, der ganze Bildschirm komisch flackert und nach ca. 2sek will mir der Debugger erklären "Image does not exsist", obwohl ich da gar kein Bild außer der Maus lade, aber die war vorher auch schon da.

Hier noch der Code:


Code: [AUSKLAPPEN]

;---------------------------------------------Einstellungen
Graphics 1024,768,32,1
SetBuffer BackBuffer()
Global font1 = LoadFont("Arial", 30, 1, 1, 0)
Global font2 = LoadFont("Century Gothic", 20, 1, 1, 0)
Global Grafik=0, mausklick
Global xmax=1024,ymax=768
SetBuffer BackBuffer()
Global frametimer = CreateTimer(60)
SeedRnd MilliSecs()

Global kugel=LoadImage("Bullet2.png")
MidHandle kugel

Global spieler1=LoadImage("Spieler_1.png")
MidHandle spieler1
MaskImage spieler1,255,255,255

Global spieler2=LoadImage("Spieler_2.png")
MidHandle spieler2
MaskImage spieler2,255,255,255

Global begrenzung=LoadImage("Wand.png")
MaskImage begrenzung,255,255,255

Global mauszeiger=LoadImage("Mauszeiger_1.png")
MaskImage mauszeiger,0,0,0

Global xsp1=xmax/2;in der Mitte
Global xsp2=xmax/2
Global ysp1=ymax-10;10 Pixel überm unteren Rand
Global ysp2
Global sp1st
Global sp2st
Global xkugel#
Global ykugel#
Global winkel
Global geschwindigkeit=10
Global fehlersp1
Global fehlersp2
Global beweglichkeit
Global cheats
Global xZufall#


 
ClsColor 0,0,200
Color 128,255,0
SetFont font1
Repeat

DrawImage mauszeiger,MouseX(),MouseY()

   
    Text 500,100,"Ping-Pong",1,1
    Text 500,200,"Spiel starten ",1,1
    Text 500,300,"Optionen",1,1 
    Text 500,400,"Credits",1,1
    Text 500,500,"Beenden",1,1

mausklick = MouseHit(1)
   
   
        If mausklick And Maus_Text_Kollision(500,200,"Spiel starten",1,1) Then Handbuch()
        If mausklick And Maus_Text_Kollision(500,300,"Optionen",1,1) Then Optionen()
        If mausklick And Maus_Text_Kollision(500,400,"Credits",1,1) Then Credits ()
        If mausklick And Maus_Text_Kollision(500,500,"Beenden",1,1) Then Ende()
       

   Flip:Cls
Until KeyHit(1)
End

If KeyHit(1) Then End

;--------------------------------------------Funktionen
Function Maus_Text_Kollision(xPos,yPos,Text1$,AusrichtungX = 0,AusrichtungY = 0)
   Breite=StringWidth(Text1$)
   Hoehe =StringHeight(Text1$)
   If AusrichtungX  Then xPos = xPos - Breite/2
   If AusrichtungY  Then yPos = yPos - Hoehe/2
   
   If RectsOverlap(xPos,yPos,Breite,Hoehe,MouseX(),MouseY(),1,1) Then
    Rect xPos,yPos,Breite,Hoehe,0; Rahmen zur Kontrolle
    Return True
    End If
   Return False
End Function

Function Handbuch()
   Repeat
    Cls
    DrawImage mauszeiger,MouseX(),MouseY()       
    Text 500,200,"Haben Sie das Handbuch gelesen?",1,1
    Text 500,240,"Ja",1,1
    Text 500,265,"Nein",1,1
    If mausklick And Maus_Text_Kollision(500,240,"Ja",1,1) Then Startegame()
    If mausklick And Maus_Text_Kollision(500,265,"Nein",1,1) Then
      OpenFile "Handbuch.txt"
      End
    EndIf
    Flip
   Until GetKey()<>0
End Function
 
Function Startegame()
    Cls
    Text 500,300,"Spiel wird geladen!",1,1
    DrawImage mauszeiger,MouseX(),MouseY()
    Flip
    Delay 1000
    Include"PPT_06.bb"
    Graphics 1024,768,32,1
    SetFont font2   
End Function


Function Optionen() 
    Cls
    Repeat
    DrawImage mauszeiger,MouseX(),MouseY()
    Text 450,200,"Grafikeinstellungen:",1,1
    Text 500,250,"800X600X16",1,1
    If mausklick And Maus_Text_Kollision(400,200,"Grafikeinstellungen:",1,1)
          Cls
          Text 450,200,"Grafikeinstellungen:",1,1
          Text 400,250,"800X600X16",1,1
          If mausklick And Maus_Text_Kollision(400,200,"Grafikeinstellungen:",1,1) Then
            Grafikeinstellungen()
            Grafik=Grafik+1
          EndIf
          Flip       
    EndIf
    Flip
   Until KeyHit(3)
End Function

Function Grafikeinstellungen()
  Cls 
  DrawImage mauszeiger,MouseX(),MouseY()       
    Select Grafik
      Case 1 Grafik=0
        Cls
        Text 400,250,"800X600X16",1,1
        Graphics 800,600,16,2
        SetBuffer BackBuffer()
        ClsColor 0,0,200
        Color 128,255,0
        LoadFont("Arial", 30, 1, 1, 0)
        Flip 
      Case 2 Grafik=1   
        Cls
        Text 400,250,"1024X768X16",1,1
        Graphics 1024,768,16,1
        SetBuffer BackBuffer()   
        ClsColor 0,0,200
        Color 128,255,0
        LoadFont("Arial", 30, 1, 1, 0) 
        Flip
      Case 3 Grafik=2
        Cls
        Text 400,250,"1280X1024X16",1,1
        Flip
      Default
        Print "Irgendwas klappt nicht"       
    End Select
    If Grafik>2 Then Grafik=0
    Flip
End Function
     
Function Credits ()
    Cls
    Text 500,100,"Menü by Lord AdZ",1,1
    Flip
    Delay 1000
End Function

Function ende ()
    Cls
    Text 500,100,"Spiel wird beendet",1,1
    Text 500,130,"Bitte habe Sie einen Augenblick Geduld.....",1,1
    Flip
    Delay 2000
    End
End Function 

Function resetkugel()
xkugel=xmax/2:ykugel=ymax/2
If Rand(0,1)=1 Then winkel=Rand(75,105) Else winkel=Rand(255,285);zufälliger Winkel
End Function
       

Smily

BeitragMi, Apr 11, 2007 11:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
   Repeat
    Cls
    DrawImage mauszeiger,MouseX(),MouseY()       
    Text 500,200,"Haben Sie das Handbuch gelesen?",1,1
    Text 500,240,"Ja",1,1
    Text 500,265,"Nein",1,1
    If mausklick And Maus_Text_Kollision(500,240,"Ja",1,1) Then Startegame()
    If mausklick And Maus_Text_Kollision(500,265,"Nein",1,1) Then
      OpenFile "Handbuch.txt"
      End
    EndIf
    Flip
   Until GetKey()<>0


Naa welchen Wert hat Mausklick wohl in diesem Moment? Wink
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Lord AdZ

BeitragMi, Apr 11, 2007 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, du hast recht, wenn ich mausklick=Mousehit(1) dazuschreibe, funktioniert die Handbuch-Funktion. Aber das Optionsmenü flackert immer noch. Was soll ich da tun?

Smily

BeitragMi, Apr 11, 2007 12:59
Antworten mit Zitat
Benutzer-Profile anzeigen
mach mal das CLS in der Repeat schleife
Bei welcher Zeile genau kommt der fehler?

mfg, Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Lord AdZ

BeitragMi, Apr 11, 2007 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
OK, cls hab ich jetzt in der repeat-Schleife, jetz flackerts nicht mehr, aber der Error ist immer nocht da, und zwar hier:
Code: [AUSKLAPPEN]

Function Optionen()     
    Repeat
    Cls
    DrawImage mauszeiger,MouseX(),MouseY();<----------- hier
    mausklick=MouseHit(1)
    Text 450,200,"Grafikeinstellungen:",1,1
    Text 500,250,"800X600X16",1,1
    If mausklick And Maus_Text_Kollision(400,200,"Grafikeinstellungen:",1,1)
          Cls
          Text 450,200,"Grafikeinstellungen:",1,1
          Text 400,250,"800X600X16",1,1
          If mausklick And Maus_Text_Kollision(400,200,"Grafikeinstellungen:",1,1) Then
            Grafikeinstellungen()
            Grafik=Grafik+1
          EndIf
          Flip       
    EndIf
    Flip
   Until KeyHit(3)
End Function

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Apr 11, 2007 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Nach jedem Graphics Befehl musst du die Bilder und Fonts neu laden!
[BB2D | BB3D | BB+]

Lord AdZ

BeitragMi, Apr 11, 2007 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich doch!
Code: [AUSKLAPPEN]

Function Grafikeinstellungen()
  Cls 
  DrawImage mauszeiger,MouseX(),MouseY()       
    Select Grafik
      Case 1 Grafik=0
        Cls
        Text 400,250,"800X600X16",1,1
        Graphics 800,600,16,1
        SetBuffer BackBuffer()
        ClsColor 0,0,200
        Color 128,255,0
        LoadFont("Arial", 30, 1, 1, 0); da lade ich die font
        DrawImage mauszeiger,MouseX(),MouseY() ; hier den Mauszeiger
        Flip 
      Case 2 Grafik=1   
        Cls
        Text 400,250,"1024X768X16",1,1
        Graphics 1024,768,16,1
        SetBuffer BackBuffer()   
        ClsColor 0,0,200
        Color 128,255,0
        LoadFont("Arial", 30, 1, 1, 0)
        DrawImage mauszeiger,MouseX(),MouseY()
        Flip
      Case 3 Grafik=2
        Cls
        Text 400,250,"1280X1024X16",1,1
        Flip
      Default
        Print "Irgendwas klappt nicht"
        Delay 1000     
    End Select
    If Grafik>2 Then Grafik=0
    Flip
End Function

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Apr 11, 2007 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
eben nicht,
Code: [AUSKLAPPEN]
Case 1 Grafik=0
        Cls
        Text 400,250,"800X600X16",1,1
        Graphics 800,600,16,1
        SetBuffer BackBuffer()
        ClsColor 0,0,200
        Color 128,255,0
        LoadFont("Arial", 30, 1, 1, 0); da lade ich die font
        DrawImage mauszeiger,MouseX(),MouseY() ; hier den Mauszeiger
        Flip 

der Font wird geladen aber der Mauszeiger nicht!
Schreib doch einfach eine
Function LoadAlleBilderUndFontsNeu()
die rufst du auf nachdem du die Grafik änderst und das Problem ist gelöst!
[BB2D | BB3D | BB+]

Smily

BeitragMi, Apr 11, 2007 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du mit blitzplus arbeitest, kannst du beim laden von grafiken noch zusätzlich den parameter "1" geben, damit gehen sie nach der änderung der auflösung nicht verloren:

Code: [AUSKLAPPEN]
img = loadimage("test.bmp",1)
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Lord AdZ

BeitragDo, Apr 12, 2007 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Rallimen: "Image does not exsist" wird immer noch angezeigt, jetzt aber erst, wenn ich zum 2. Mal auf Grafikeinstellungen klicke.
Code: [AUSKLAPPEN]

Function AlleBilderundFontsladen()
   LoadFont("Arial", 30, 1, 1, 0)
   LoadFont("Century Gothic", 20, 1, 1, 0)
   LoadImage("Mauszeiger_1.png")
End Function


@Smily: Ich benutz aber Blitz3d

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDo, Apr 12, 2007 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst in deiner Function auch die werte einer Variablen zuweisen
Beispiel
Code: [AUSKLAPPEN]
Mauszeiger = LoadImage("Mauszeiger_1.png")


Die Var Mauszeiger muss auch Global am Anfang gesetzt werden


In deinem ersten Code da oben hast du viel mehr Bilder geladen.
Ich hab das mal zusammengestellt, und die Function müsste so aussehen.
Code: [AUSKLAPPEN]
Global Font1
Global font2
Global kugel
Global spieler1
Global spieler2
Global begrenzung
Global mauszeiger
Function AlleBilderundFontsladen()
    font1 = LoadFont("Arial", 30, 1, 1, 0)
    font2 = LoadFont("Century Gothic", 20, 1, 1, 0)
    kugel=LoadImage("Bullet2.png")
    MidHandle kugel
    ;
    spieler1=LoadImage("Spieler_1.png")
    MidHandle spieler1
    MaskImage spieler1,255,255,255
    ;
    spieler2=LoadImage("Spieler_2.png")
    MidHandle spieler2
    MaskImage spieler2,255,255,255
    ;
    begrenzung=LoadImage("Wand.png")
    MaskImage begrenzung,255,255,255
    ;
    mauszeiger=LoadImage("Mauszeiger_1.png")
    MaskImage mauszeiger,0,0,0
    ;
End Function

Wenn du nach jedem neuen setzten der Auflösung die Function AlleBilderundFontsladen() ausführst sollte es gehen
[BB2D | BB3D | BB+]

ShadowJumper

BeitragDo, Apr 12, 2007 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Rallimen hat Folgendes geschrieben:
Nach jedem Graphics Befehl musst du die Bilder und Fonts neu laden!

also da muss ich mal völlig wiedersprechen
ich hab bei mir am Anfang meines Spiels folgenden Befehl
Code: [AUSKLAPPEN]
Global blitzlogo=LoadImage("Graphics/blitzlogo.png")

der ist im restlichen Code nicht einmal vertreten und auch nicht ohne Global
das Bild wird im Hauptmenü gezeigt und das Spiel läuft IMMER in einer anderen Auflösung (manchmal auch anderes Format) und es kann trozdem noch angezeigt werden (ohne probleme)

es kann vlt. auch daran liegen das ich BlitzPlus habe

Hagbard

BeitragDo, Apr 12, 2007 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Rallimen hat Recht.
Ich habe es jetzt mal getestet:
BB2D: nein
BB3D: nein
BB+ : ja

Lord AdZ

BeitragDo, Apr 12, 2007 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein Problem wird immer kleiner Very Happy. Es gibt jetzt keinen Error mehr, aber irgendwie ändert sich die Auflösung nicht.

Code: [AUSKLAPPEN]

Function Grafikeinstellungen()
  Cls         
    Select Grafik
      Case 1 Grafik=0
        Cls
        Text 400,250,"1024X768X32",1,1
        Graphics 1024,768,32,1
        AlleBilderundFontsladen()
        DrawImage mauszeiger,MouseX(),MouseY()
        Grafik=0
      Case 2 Grafik=1   
        Cls
        Text 400,250,"800X600X16",1,1
        Graphics 800,600,16,1
        AlleBilderundFontsladen()
        DrawImage mauszeiger,MouseX(),MouseY()
        Grafik=1
      Default
        Print "!!!"
        Delay 1000   
    End Select
    If Grafik>1 Then Grafik=0
    Flip
End Function

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDo, Apr 12, 2007 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
@ShadowJumper
Es liegt an Blitz Plus!
Du Lädst dein Bild nämlich in den Ram, von dem es immer wenn notwendig in den Videospeicher kopiert wird.
Wenn du es nur in den Videospeicher laden willst da es dann schneller ist, musst du die Bilder mit dem Parameter ,2 laden(so wie BB3d und BB2D). Ohne Angabe eines Parameters ist der Standard ,1
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group