gui problem
Übersicht

Boris1993Betreff: gui problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo
ich versuche grad eine gui zu schreiben und habe ein ersten test geschrieben mit 2 buttons der erste button funktioniert einwandfrei aber der zweite nicht und ich weiß nicht woran das liegen könnte hier der code: Code: [AUSKLAPPEN] Graphics 800, 600, 32, 2
SetBuffer BackBuffer() txt1$ = "Button 1" txt2$ = "Button 2" Repeat Cls If button(10, 10, txt1) a = 1 If button(10, 40, txt2) b = 1 Text 150, 10, a Text 150, 40, b Flip Until KeyHit(1) End Function button(x, y, txt$) Local on_btn Local mx = MouseX() Local my = MouseY() Local mh = GetMouse() If mx >= x And my >= y And mx <= x + 100 And my <= y + 20 Then on_btn = 1 End If If on_btn = 0 Then Color 255, 0, 0 ElseIf on_btn = 1 Then Color 0, 255, 0 EndIf Rect x, y, 100, 20 x = x + 100 / 2 y = y + 20 / 2 Color 0, 0, 0 ctr_txt(x, y, txt) Color 255, 255, 255 If on_btn = 1 And mh = 1 Then Return 1 End If Return 0 End Function Function ctr_txt(x, y, txt$) Local txt_len = Len(txt) txt_x_mid = txt_len * 8 / 2 x = x - txt_x_mid txt_y_mid = 6 y = y - txt_y_mid Text x, y, txt End Function danke für eure hilfe mfg Boris1993 |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
das alte Problem mit der Maus-gedückt-Abfrage.
Du speicherst zwar den Wert von GetMouse ab - allerdings nur Local in der Funktion button. Mach die Maus-Veriablen global (und frage sie nicht in der Funktion sondern einmal in der hauptschleife ab) und es solte klappen. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Boris1993 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ne daran kanns nicht liegen denn beim ersten button funktionierts ja sogar und die butten ändern auch beide ihre farbe wenn man mit dem zeiger über ihnen ist nur die variable die sie verändern sollen verändert sich nur beim ersten button | ||
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
*Hust*,
Les dir das was Eingeproggt dir geantwortet hat bitte noch einmal durch und vergleiche das dann mit deiner Antwort mit folgendem Wissen: MouseX() und MouseY() können selbstverständlich auch öfters als jeweils nur einmal pro Schleifendurchgang ohne Probleme aufgerufen werden da sie lediglich eine Position die immer irgendwie vorhanden ist zurückliefern. Nun hingegen sind die Tastenabfragen, wie etwa auch GetMouse(), darauf ausgelegt, nur Klicks seit ihrem letzten Aufruf zu berücksichtigen. D.h. nun für dein Programm, dass das MouseOver zwar einwandfrei funktioniert, nicht jedoch die Tastenerkennung für den zweiten Button da Klicks die diesen erreichen sollen zwischen dem Aufruf von GetMouse() bei Button1 und dem Aufruf von GetMouse() bei Button2 erfolgen müssten was eher unwahrscheinlich ist. Die meisten Klicks werden zwischen Button2 und Button1 erfolgen und können so auch nur von diesem abgefangen werden(Grund hierfür ist Flip welches das Programm in deinem Fall immer kurz anhält um auf die gewünschten 60FPS zu kommen). Ich habe mir erlaubt deinen Code kurz daraufhin anzupassen, und voilà, es funktioniert: BlitzBasic: [AUSKLAPPEN] Graphics 800, 600, 32, 2 |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ganz schön dreist... Ne Scherz am Rande ![]() ![]() ![]() ![]() Edit: Also erstens zu langsam und zum anderen, Du sollst nicht GetMouse mit MouseHit tauschen, nur die Suche wird mehr passende Ergebnisse ausspucken. Das nur weil ich beim Korrekturlesen gemerkt habe das die Formulierung problemlos falsch verstanden werden könnte ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Boris1993 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich begreifs nich ![]() hmm zwischendurch hab ich auch einmal den pc neu gestartet vllt hats erst desshalb geklappt danke für die hilfe ist sowas bei euch auch mal gewesen dass ein prog nach der verbesserung noch nicht funktioniert hat aber nach dem neustart denn wenn man weiß wann sowas auftritt kann man sich viel grübelei ersparen^^ |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du darfst mh nicht in derselben Funktion aktualisieren wie die Buttons! Für den Anfang kannst du es einfach in der Hauptschleife aktualisieren.
Außerdem: Text ![]() BlitzBasic: [AUSKLAPPEN] Text x+50,y+10,"Hallo",True,True mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
Hangman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So ist das gemeint und es geht:
Code: [AUSKLAPPEN] Graphics 800, 600, 32, 2
SetBuffer BackBuffer() txt1$ = "Button 1" txt2$ = "Button 2" Global mh=0 Repeat Cls mh = GetMouse() If button(10, 10, txt1) a = 1 If button(10, 40, txt2) b = 1 Text 150, 10, a Text 150, 40, b Flip Until KeyHit(1) End Function button(x, y, txt$) Local on_btn Local mx = MouseX() Local my = MouseY() If mx >= x And my >= y And mx <= x + 100 And my <= y + 20 Then on_btn = 1 End If If on_btn = 0 Then Color 255, 0, 0 ElseIf on_btn = 1 Then Color 0, 255, 0 EndIf Rect x, y, 100, 20 x = x + 100 / 2 y = y + 20 / 2 Color 0, 0, 0 ctr_txt(x, y, txt) Color 255, 255, 255 If on_btn = 1 And mh = 1 Then Return 1 End If Return 0 End Function Function ctr_txt(x, y, txt$) Local txt_len = Len(txt) txt_x_mid = txt_len * 8 / 2 x = x - txt_x_mid txt_y_mid = 6 y = y - txt_y_mid Text x, y, txt End Function |
||
Ich habe Berthold gebrochen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group