Hilfe mit der Maus

Anfängerfragen zum Programmieren mit PureBasic.
Conshar
Beiträge: 14
Registriert: 13.06.2008 02:16

Beitrag von Conshar »

Ich hätte hier eine überarbeitete Version, hier sind, was ihr wohl Flags nennt vorhanden, wenn ich es richtig verstanden habe.

Abgeschaut habe ich hierbei von einem Beispiel, das jedoch anstatt Sprites, drawing-befehle beinhaltet hat. Also hab ich es etwas angepasst, nun klappt es aber garnicht mehr anzuklicken.

Ich habe davon noch garnichts belegt, vorgehabt habe ich erstmal "Exit" zu belegen, es sollte, wenn man es anklickt nicht zuerst beenden, sondern ein Abfrage-Fenster öffnen(Sprite), ob man es wirklich beenden will.

Datei mit Bildern:
http://www.file-upload.net/download-931 ... r.rar.html

Code: Alles auswählen

;-Erstelle Daten für Openscreen in Menu_Main()
#Window_Width        = 800
#Window_Height       = 600
#Window_Depth        = 32
#Window_Menu_Titel$  = "Alex der Alphamaster"
;-Nummeriere HauptMenü Sprites(Bilder)
Enumeration
#Menu_Hintergrund
#Menu_MenuSprite
#Menu_Start_NG
#Menu_Start_G
#Menu_Options_NG
#Menu_Options_G
#Menu_Highscore_NG
#Menu_Highscore_G
#Menu_Credits_NG
#Menu_Credits_G       
#Menu_Exit_NG
#Menu_Exit_G
#Menu_MenuExit
#Menu_ExitJa_NG
#Menu_ExitJa_G
#Menu_ExitNein_NG
#Menu_ExitNein_G

#Menu_Cursor
EndEnumeration
;-Nummerieren der Buttonsbefehle
Enumeration
#Main_Hauptmenu
#Main_Gamestart
#Main_Options
#Main_Highscore
#Main_Credits
#Main_Exit
EndEnumeration


If InitMouse()    = #False : MessageRequester("Fehlermeldung","Fehler, Es konnte keine DirectX gefunden werden") : EndIf
If InitKeyboard() = #False : MessageRequester("Fehlermeldung","Fehler, Es konnte keine DirectX gefunden werden") : EndIf
If InitSprite()   = #False : MessageRequester("Fehlermeldung","Fehler, Es konnte keine DirectX gefunden werden") : EndIf
If InitSound()    = #False : MessageRequester("Fehlermeldung","Fehler, Es konnte keine DirectX gefunden werden") : EndIf

If OpenScreen(#Window_Width,#Window_Height,#Window_Depth,#Window_Menu_Titel$) = #False
MessageRequester("Fehlermeldung","Fehler, Es konnte kein Fenster geöffnet werden")
EndIf


LoadSprite(#Menu_Hintergrund,"Grafik\Hintergrund\Hintergrund.bmp",0)
LoadSprite(#Menu_MenuSprite,"Grafik\Menu\Buttons\Menu.bmp",0)
LoadSprite(#Menu_Start_NG,"Grafik\Menu\Buttons\StartNG.bmp",0)
LoadSprite(#Menu_Start_G,"Grafik\Menu\Buttons\StartG.bmp",0)
LoadSprite(#Menu_Options_NG,"Grafik\Menu\Buttons\OptionNG.bmp",0)
LoadSprite(#Menu_Options_G,"Grafik\Menu\Buttons\OptionG.bmp",0)
LoadSprite(#Menu_Highscore_NG,"Grafik\Menu\Buttons\ScoreNG.bmp",0)
LoadSprite(#Menu_Highscore_G,"Grafik\Menu\Buttons\ScoreG.bmp",0)
LoadSprite(#Menu_Credits_NG,"Grafik\Menu\Buttons\CreditsNG.bmp",0)
LoadSprite(#Menu_Credits_G,"Grafik\Menu\Buttons\CreditsG.bmp",0)
LoadSprite(#Menu_Exit_NG,"Grafik\Menu\Buttons\ExitNG.bmp",0)
LoadSprite(#Menu_Exit_G,"Grafik\Menu\Buttons\ExitG.bmp",0)
LoadSprite(#Menu_MenuExit,"Grafik\Menu\ExitButtonMenu\ExitMenu.bmp",0)
LoadSprite(#Menu_ExitJa_NG,"Grafik\Menu\ExitButtonMenu\JaNG.bmp",0)
LoadSprite(#Menu_ExitJa_G,"Grafik\Menu\ExitButtonMenu\JaG.bmp",0)
LoadSprite(#Menu_ExitNein_NG,"Grafik\Menu\ExitButtonMenu\NeinNG.bmp",0)
LoadSprite(#Menu_ExitNein_G,"Grafik\Menu\ExitButtonMenu\NeinG.bmp",0)

LoadSprite(#Menu_Cursor,"Grafik\Maus\Mauszeiger.bmp",0)


MouseLocate(300,300)

Procedure MT_Links() ;0 = Falsch, 1 = Gedrückt, 2 = Unten, 3 = Losgelassen
  If MouseButton(1)
    If MT_Links = 0        ; = Falsch
      MT_Links = 1         ; = Gedrückt
    Else
      MT_Links = 2         ; = Unten
    EndIf
  Else
    If MT_Links = 3        ; = Losgelassen
      MT_Links = 0         ; = Falsch
    ElseIf MT_Links = 2   ; = Unten
      MT_Links = 3         ; = Losgelassen
    EndIf
  EndIf
EndProcedure

Procedure.l Display_Buttons()
If MouseX() > 300 And MouseX() < 300 + 200 And MouseY() > 205 And MouseY() < 205 + 30
  DisplaySprite(#Menu_Start_G,300,205)
  Else  
  DisplaySprite(#Menu_Start_NG,300,205)
EndIf  
If MouseX() > 300 And MouseX() < 300 + 200 And MouseY() > 245 And MouseY() < 245 + 30
  DisplaySprite(#Menu_Options_G,300,245)
  Else  
  DisplaySprite(#Menu_Options_NG,300,245)
EndIf
If MouseX() > 300 And MouseX() < 300 + 200 And MouseY() > 285 And MouseY() < 285 + 30
  DisplaySprite(#Menu_Highscore_G,300,285)
  Else  
  DisplaySprite(#Menu_Highscore_NG,300,285)
EndIf
If MouseX() > 300 And MouseX() < 300 + 200 And MouseY() > 325 And MouseY() < 325 + 30
  DisplaySprite(#Menu_Credits_G,300,325)
  Else  
  DisplaySprite(#Menu_Credits_NG,300,325)
EndIf
If MouseX() > 300 And MouseX() < 300 + 200 And MouseY() > 365 And MouseY() < 365 + 30
  DisplaySprite(#Menu_Exit_G,300,365)
  Else  
  DisplaySprite(#Menu_Exit_NG,300,365)
EndIf
EndProcedure

Procedure.l Display_Startbutton()
Protected Clicked
If MouseX() > 300 And MouseX() < 300 + 200 And MouseY() > 205 And MouseY() < 205 + 30
  If MT_Links = 3 ; = Losgelassen
    Clicked = #True
    MT_Links = 0 ; = Falsch
  EndIf
EndIf    
  ProcedureReturn Clicked
EndProcedure  

Procedure.l Display_Optionbutton()
Protected Clicked
If MouseX() > 300 And MouseX() < 300 + 200 And MouseY() > 245 And MouseY() < 245 + 30
  If MT_Links = 3 ; = Losgelassen
    Clicked = #True
    MT_Links = 0 ; = Falsch
  EndIf
EndIf    
  ProcedureReturn Clicked
EndProcedure  

Procedure.l Display_Highscorebutton()
Protected Clicked
If MouseX() > 300 And MouseX() < 300 + 200 And MouseY() > 285 And MouseY() < 285 + 30
  If MT_Links = 3 ; = Losgelassen
    Clicked = #True
    MT_Links = 0 ; = Falsch
  EndIf
EndIf    
  ProcedureReturn Clicked
EndProcedure  

Procedure.l Display_Creditsbutton()
Protected Clicked
If MouseX() > 300 And MouseX() < 300 + 200 And MouseY() > 325 And MouseY() < 325 + 30
  If MT_Links = 3 ; = Losgelassen
    Clicked = #True
    MT_Links = 0 ; = Falsch
  EndIf
EndIf    
  ProcedureReturn Clicked
EndProcedure  

Procedure.l Display_Exitbutton()
Protected Clicked
If MouseX() > 300 And MouseX() < 300 + 200 And MouseY() > 325 And MouseY() < 365 + 30
  If MT_Links = 3 ; = Losgelassen
    Clicked = #True
    MT_Links = 0 ; = Falsch
  EndIf
EndIf    
  ProcedureReturn Clicked
EndProcedure  

Procedure Menu_Gamestart()

EndProcedure

Procedure Menu_Options()

EndProcedure

Procedure Menu_Highscore()

EndProcedure

Procedure Menu_Credits()

EndProcedure

Procedure Menu_Exit()
Protected Menu = - 1
Repeat
ExamineKeyboard()
ExamineMouse()
FlipBuffers()
MT_Links()
DisplaySprite(#Menu_MenuExit,(#Window_Width / 2) - (SpriteWidth(#Menu_MenuExit) / 2) ,(#Window_Height / 2) - (SpriteHeight(#Menu_MenuExit)/2))
If KeyboardPushed(#PB_Key_Return)
End
EndIf
Until Menu > - 1
EndProcedure




Procedure.l Menu_Main()
Protected Chosen = - 1
Repeat
ExamineKeyboard()
ExamineMouse()
FlipBuffers()
MT_Links()

DisplaySprite(#Menu_Hintergrund,0,0)
DisplaySprite(#Menu_MenuSprite,(#Window_Width / 2) - (SpriteWidth(#Menu_MenuSprite) / 2) ,(#Window_Height / 2) - (SpriteHeight(#Menu_MenuSprite)/2))

Display_Buttons()

; Display_Startbutton() : Display_Optionbutton() : Display_Highscorebutton() : Display_Creditsbutton() : 
 
If Display_Exitbutton()
Chosen = 4
EndIf
 
If KeyboardPushed(#PB_Key_Q)
End
EndIf

TransparentSpriteColor(#Menu_Cursor,RGB(255,0,255))
DisplayTransparentSprite(#Menu_Cursor,MouseX()-10,MouseY()-10)

Until Chosen > -1
ProcedureReturn Chosen
EndProcedure







;-=====DER KERN=====



Repeat

  ;-Menü-Auswahl
  Select Menu
    Case #Main_Hauptmenu
      Select Menu_Main()
        Case 0: Menu = #Main_Gamestart ; Spiel wird gestartet
        Case 1: Menu = #Main_Options   ; Öffne Optionen
        Case 2: Menu = #Main_Highscore ; Zeige Highscore
        Case 3: Menu = #Main_Credits   ; Zeige Credits
        Case 4: Menu = #Main_Exit      ; Zeige ExitMenu
      EndSelect
    Case #Main_Gamestart
      Select Menu_Gamestart()
        Case 0: Menu = #Main_Hauptmenu ; Gehe wieder ins Hauptmenü
      EndSelect
    Case #Main_Options
      Select Menu_Options()
        Case 0: Menu = #Main_Hauptmenu ; Gehe wieder ins Hauptmenü
      EndSelect
    Case #Main_Highscore
      Select Menu_Highscore()
        Case 0: Menu = #Main_Hauptmenu ; Gehe wieder ins Hauptmenü
      EndSelect
    Case #Main_Credits
      Select Menu_Credits()
        Case 0: Menu = #Main_Hauptmenu ; Gehe wieder ins Hauptmenü
      EndSelect
    Case #Main_Exit
      Select Menu_Exit()
        Case 0: End
        Case 1: Menu = #Main_Hauptmenu ; Gehe wieder ins Hauptmenü
      EndSelect
  EndSelect
ForEver
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ein Problem was mir sofort ins ausge fällt:
MT_Links ist nicht Global.
die Variable existiert nur in Procedure MT_Links() solange die läuft, dann wird sie gelöscht,
und wenn Display_Startbutton() aufgerufen wird, wird eine neue MT_Links erzeugt,
die dann natürlich immer NULL ist, weil die grad erzeugt wurde.

...aber grundsätzlich schon mal gut mitgedacht, MT_Links ist ein Flag mit mehreren Zuständen,
diese Grundidee hast du wohl schon verstanden. :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Conshar
Beiträge: 14
Registriert: 13.06.2008 02:16

Beitrag von Conshar »

Unglaublich, es klappt!

Danke dir vielmals, ich würde wohl ewig in diesem Codeteil hängenbleiben, wenn du mir nicht geholfen hättest <)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ist schon ok.
es war ja nicht so riesig viel, und du zeigst ja gut eigeninitiative.
das ist dann was ganz anderes als leute, die ne ganze woche fragen und nur versuchen, einem code ausm kreuz zu leiern.

also, weiterhin viel erfolg, und wenn dein game fertig ist, kannst du es gerne im Feedback-Bereich vorstellen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Conshar
Beiträge: 14
Registriert: 13.06.2008 02:16

Beitrag von Conshar »

Geplant war es eigentlich einfach nur als Privat um Erfahrungen in Purebasic für Spiele programmieren zu sammeln, es soll nur ein kleines Spiel eher für Kinder geeignet sein.

Solche spiele sind meiner Meinung nach einfacher zu programmieren, als RPG-Spiele etc. Deswegen habe ich mich entschieden erstmal dieses zu schreiben.

Werde aber, falls erwünscht später auch gerne öffentlich machen, hätte überhaupt keine Probleme damit :)
Antworten