Nochmal Problem mit Menü [gelöst]
Übersicht

![]() |
maboxBetreff: Nochmal Problem mit Menü [gelöst] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab nochmal ein Problem mit dem Menü von Pdd (siehe unten).
Und zwar: Wenn man irgendwohin klickt und dann über einen Button kommt macht es die Buttonaktion. Ich will aber, dass es die Buttonaktion nur macht wenn man wirklich auf den Button klickt. Bis jetzt hab ich mich hauptsächlich mit dem Menü selbst (siehe unten) und nicht mit der dazu verwendeten Library beschäftigt (die ist mir noch zu kompliziert). Das Menü: Code: [AUSKLAPPEN] ; Beispiel für die Nutzung der PButtons-lib.
Include "PButtons.bb" Graphics 800, 600, 32, 2 SetBuffer BackBuffer() Global MainImage = LoadImage("main.png") Global menu = 1 Global Timer = CreateTimer(30) Global menustate = 1 Global Btn_daddln = PB_CreateButton("Jetzt daddln: Hier klicken!!!", 40, 176, 1, 232, 54) Global Btn_beenden = PB_CreateButton("Zum Beenden hier drücken.", 610, 536, 1, 164, 43, "exit_over.png") Global Btn_back = PB_CreateButton("Drücke hier, um zurück zu gelangen.", 10, 10, 1, StringWidth("Zurück."), FontHeight()) PB_SetHintFont("Verdana") PB_SetHintColor(245, 248, 152, 0, 0, 0, 208, 55, 163) Repeat WaitTimer(Timer) Cls Select menustate Case 1 ; Hauptmenü ; Erst alle anderen Buttons Deaktivieren PB_DisableAll() PB_EnableButton(Btn_daddln) PB_EnableButton(Btn_beenden) ; Das Menü-Bild malen DrawImage MainImage, 0, 0 If PB_ButtonHit(Btn_daddln) Then menustate = 2 If PB_ButtonHit(Btn_beenden) Then menu = 0 Case 2 ; daddln ; Jetzt zuerst alle Buttons deaktivieren, sonst könnte man die Anderen Buttons noch drücken! PB_DisableAll() PB_EnableButton(Btn_back) Cls Color 255, 255, 255 Text 10, 10, "Zurück." If PB_ButtonHit(Btn_back) Then menustate = 1 End Select ; Nicht vergessen: Updaten PB_Update() Flip Until menu = 0 End Die Library: Code: [AUSKLAPPEN] ; PButtons v1.0 by Pdd (C) 2006.
; Mail: pddpms [ÄT] yahoo.de ; Diese Lib darf frei verwendet werden, würde mich aber um einen Credits-Eintrag freuen! Type TButton Field X Field Y Field name$ Field ID Field Width Field Heigth Field Hint Field Hit Field Enabled Field OverImage End Type Global Button.TButton Global PB_ButtonHintFont = LoadFont("Verdana") Dim PB_HintColor(9) PB_HintColor(1) = 74 PB_HintColor(2) = 128 PB_HintColor(3) = 225 PB_HintColor(4) = 0 PB_HintColor(5) = 0 PB_HintColor(6) = 0 PB_HintColor(7) = 0 PB_HintColor(8) = 0 PB_HintColor(9) = 0 ; Setzt die Farbe der Hints ; rgb - Farbe des Hintergrunds ; r1g1b1 - Farbe des Rands ; r2g2b2 - Farbe des Textes Function PB_SetHintColor(r, g, b, r1, g1, b1, r2, g2, b2) ; Hintergrund PB_HintColor(1) = r PB_HintColor(2) = g PB_HintColor(3) = b ; Rahmen PB_HintColor(4) = r1 PB_HintColor(5) = g1 PB_HintColor(6) = b1 ; Text PB_HintColor(7) = r2 PB_HintColor(8) = g2 PB_HintColor(9) = b2 End Function ; Setzt die Schriftart des Hints ; font$ - Schriftart Function PB_SetHintFont(font$) PB_ButtonHintFont = LoadFont(font$) End Function ; Erstellt einen Button. Liefert die Identität des Buttons zurück. ; hint$ - Hint-Text ; X - X-Position des Buttons ; Y - Y-Position des Buttons ; HintE - Ob der Hint angezeigt werden soll (0 = nein, 1 = ja) ; width - Breite des Buttons ; height - Höhe des Buttons ; OverImage(optional) - Bild, das angezeigt werden soll, wenn man mit der Maus über den Button fährt Function PB_CreateButton(hint$, X, Y, HintE = 0, width, height, Overimage$ = "") Button = New TButton Button\ID = Handle(Button) Button\name = hint$ Button\Width = width Button\Heigth = height Button\X = X Button\Y = Y Button\Hint = HintE Button\Enabled = True If Overimage$ <> "" Then Button\OverImage = LoadImage(Overimage$) EndIf Return Handle(Button) End Function ; Liefert eine 1 zurück, wenn der Button gedrückt wurde. Ansonsten 0. Function PB_ButtonHit(Btn) If Btn <> 10000 Then Button = Object.TButton(Btn) If Button\Hit = 1 And Button\Enabled = True Then Button\Hit = 0 FlushMouse Return True Else Return False EndIf EndIf End Function ; Liefert eine 1 zurück, wenn die Maus über dem Button ist. Ansonsten 0. Function PB_ButtonOver(Btn) If Btn <> 10000 Then Button = Object.TButton(Btn) If (MouseX() > Button\X) And (MouseX() < (Button\X + Button\Width)) And (MouseY() > Button\Y) And (MouseY() < (Button\Y + Button\Heigth)) And (Button\Enabled = True) Then Return True Else Return False EndIf EndIf End Function ; Aktualisiert alles. Dieser Befehl muss immer in jeder Schleife ausgeführt werden! Function PB_Update() For Button = Each TButton If (PB_ButtonOver(Button\ID) = True) And (Button\Enabled = True) Then If Button\OverImage <> 0 Then DrawImage Button\OverImage, Button\X, Button\Y EndIf If Button\Hint = 1 Then SetFont PB_ButtonHintFont Color PB_HintColor(1), PB_HintColor(2), PB_HintColor(3) ;Hintergrund If (MouseX() + 20 + StringWidth(Button\name) + 10) < 800 Then Rect MouseX() + 20, MouseY() + 1, StringWidth(Button\name) + 10, 15, 1 Color PB_HintColor(4), PB_HintColor(5), PB_HintColor(6) ;Rahmen Rect MouseX() + 20, MouseY() + 1, StringWidth(Button\name) + 10, 15, 0 Color PB_HintColor(7), PB_HintColor(8), PB_HintColor(9) ;Text Text MouseX() + 25, MouseY() + 2, Button\Name Else Rect MouseX() - 5 - (StringWidth(Button\name) + 10) , MouseY() + 1, StringWidth(Button\name) + 10, 15, 1 Color PB_HintColor(4), PB_HintColor(5), PB_HintColor(6) ;Rahmen Rect MouseX() - 5 - (StringWidth(Button\name) + 10), MouseY() + 1, StringWidth(Button\name) + 10, 15, 0 Color PB_HintColor(7), PB_HintColor(8), PB_HintColor(9) ;Text Text MouseX() - (StringWidth(Button\name) + 10), MouseY() + 2, Button\Name EndIf EndIf If MouseHit(1) Then FlushMouse Button\Hit = 1 Else Button\Hit = 0 EndIf FlushMouse EndIf Next End Function ; Aktualisiert die Eigenschaften eines Buttons. Liefert die Identität des Buttons zurück, diese bleibt aber gleich. ; Parameter siehe PB_CreateButton. Function PB_UpdateButton(Btn, hint$, X, Y, HintE = 0, width, height, Overimage = 0) If Btn <> 10000 Then Button = Object.TButton(Btn) If hint$ <> "" Then Button\name = hint$ Button\Width = width Button\Heigth = height Button\X = X Button\Y = Y Button\Hint = HintE Button\Enabled = True If Overimage <> 0 Then Button\OverImage = LoadImage(Overimage) Else Button\OverImage = 0 EndIf Return Handle(Button) EndIf End Function ; Löscht ALLE Buttons Function PB_FreeButtons() For Button = Each TButton Delete Button Next End Function ; Löscht EINEN Button ; Btn - Identität des Buttons Function PB_FreeButton(Btn) Button = Object.TButton(Btn) Delete Button End Function ; Aktiviert einen Button ; Btn - Identität des Buttons Function PB_EnableButton(Btn) If Btn <> 10000 Then Button = Object.TButton(Btn) Button\Enabled = True EndIf End Function ; Deaktiviert einen Button ; Btn - Identität des Buttons Function PB_DisableButton(Btn) If Btn <> 10000 Then Button = Object.TButton(Btn) Button\Enabled = False EndIf End Function ; Aktiviert ALLE Buttons Function PB_EnableAll() For Button = Each TButton Button\Enabled = True Next End Function ; Deaktiviert ALLE Buttons Function PB_DisableAll() For Button = Each TButton Button\Enabled = False Next End Function Vielen Dank für Hilfe! |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
- Zuletzt bearbeitet von mabox am Mo, Okt 01, 2007 20:27, insgesamt 3-mal bearbeitet
AMD |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi also
du hast ja bestimmt eingebaut wenns collidiert die maus mit dem dings da was auch immer das des ausgeführt wird. du musst das so machen: If Imagescollided(.....) and Mousehit(1) then Buttonaktion also ich hab mir jetzt deinen code gar net angesehn aber^^ auf jeden fall is da des "and Mousehit(1)" wichtig! MfG |
||
Das Leben ist ein scheiß Spiel hat aber eine saugute Grafik!
PC: AMD 5200 X2(2x2,6Ghz), 250GB Festplatte, 2048MB Arbeitsspeicher, Nvidia 9800 GTX mit 512MB..... Bildschrim mit 22 Zoll und 5msk Übertragungszeit...... Mein BaumMap Tutorial: http://www.blitzforum.de/forum...hp?t=26341 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() While Not KeyHit(1) mx=MouseX() my=MouseY() Rect 100,100,100,60,0 Rect 300,100,100,60,0 If MouseHit(1) If RectsOverlap(mx,my,1,1,100,100,100,60) Then Text 20,20,"klick" If RectsOverlap(mx,my,1,1,300,100,100,60) Then Text 20,20,"klick" End If Flip Cls Wend End |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke der Fehler in der Library ist in diesem Teil:
Code: [AUSKLAPPEN] Function PB_ButtonHit(Btn)
If Btn <> 10000 Then Button = Object.TButton(Btn) If Button\Hit = 1 And Button\Enabled = True Then Button\Hit = 0 FlushMouse Return True Else Return False EndIf EndIf End Function Ich habe mittlerweile schon viel ausprobiert aber komm einfach nicht darauf. kann mir das nochmal jemand an diesem Beispiel erläutern/zeigen? |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Funktion alleine bringt uns sogut wie nichts. Was mir aber auffiel:
Button = Object.TButton(Btn) sollte in etwa so heissen: Button.TButton = Object.TButton(Btn) |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok Danke! wobei mir das natürich nicht bei meinem eigentlichen Problem weiterhilft..........Etwas weiter oben ist der ganze Code wenn du ihn dir nochmal anschauen willst.
Bitte helft mir nochmal, ich komm wirklich nicht weiter! |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group