Problem mit aufklappenden Menu
Übersicht

Gray FoxBetreff: Problem mit aufklappenden Menu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe folgendes Problem:
Ich würde gerne ein aufklappbares Menu verwenden: Ich habe durch langes hin und her probieren es auch geschaft, dass es "dauerhaft" aufgeklappt bleibt, momentan soll egal welchen Menupunkt ich anklicke das Programm beendet werden, aber nur wenn ich auf den obersten Punkt "Neues Spiel" klicke passiert was, sieht vielleicht jemand was ich falsch mache? Btw. die Grafiken werden später erstetzt ^^ Edit: Grafiken vergessen hochzuladen: http://rapidshare.de/files/263...n.rar.html Hier mein Code: Code: [AUSKLAPPEN] Graphics 640,480,16,1 ;Include "funktionen.bb" Function menu_anzeigen() DrawBlock button_neuesspiel,30,32 DrawBlock button_optionen,30,58 DrawBlock button_beenden,30,84 End Function Global haupt Global mauszeiger Global mx Global my Global menu_aktiv Global button_menu Global button_neuesspiel Global button_optionen Global button_beenden Global mouse_hit Global ende ende = 0 menu_aktiv = 0 mouse_hit = 0 ;Grafiken laden haupt = LoadImage("grafiken\haupt.png") mauszeiger = LoadImage("grafiken\maus.png") button_menu = LoadImage("grafiken\button_menu.png") button_neuesspiel = LoadImage("grafiken\button_neuesspiel.png") button_optionen = LoadImage("grafiken\button_optionen.png") button_beenden = LoadImage("grafiken\button_beenden.png") MaskImage mauszeiger, 255,0,255 ;MaskImage button_menu, 255,0,255 ;MaskImage button_neuesspiel, 255,0,255 SetBuffer BackBuffer() While Not ende = 1 Cls mx = MouseX() my = MouseY() DrawBlock haupt,0,0 DrawBlock button_menu,30,6 If menu_aktiv = 1 Then menu_anzeigen End If If ImageRectCollide(mauszeiger,mx,my,0,30,6,90,110) Then If ImagesCollide(button_menu, 30,6,0,mauszeiger,mx,my,0) Then menu_aktiv = 1 If ImagesCollide(button_neuesspiel,30,32,0,mauszeiger,mx,my,0) And MouseHit(1) Then ende = 1 If ImagesCollide(button_optionen,30,58,0,mauszeiger,mx,my,0) And MouseHit(1) Then ende = 1 If ImagesCollide(button_beenden, 30,84,0,mauszeiger,mx,my,0) And MouseHit(1) Then ende = 1 Else menu_aktiv = 0 End If ;If MouseHit(1) Then mouse_hit = mouse_hit + 1 ;Text 100,100, "Mouse " + mouse_hit + "Menu " + menu_aktiv ;If mouse_hit = 1 Then ;menu_aktiv = 0 ;mouse_hit = 0 ;End If DrawImage mauszeiger,mx,my If KeyHit(1) Then ende = 1 Flip Wend |
||
Lastsamurai |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
EDIT: lol sry ist mist was ich geschrieben hab ![]() EDIT2: Hier die richtige Lösung ^^ Code: [AUSKLAPPEN] If ImageRectCollide(mauszeiger,mx,my,0,30,6,90,110) Then If ImagesCollide(button_menu, 30,6,0,mauszeiger,mx,my,0) Then menu_aktiv = 1 If ImagesCollide(button_neuesspiel,30,32,0,mauszeiger,mx,my,0) If MouseHit(1) ende = 1 EndIf EndIf If ImagesCollide(button_optionen,30,58,0,mauszeiger,mx,my,0) If MouseHit(1) ende = 1 EndIf EndIf If ImagesCollide(button_beenden, 30,84,0,mauszeiger,mx,my,0) If MouseHit(1) ende = 1 EndIf EndIf Else menu_aktiv = 0 End If und benutz ein FlushMouse() vor dem Flip ![]() |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke es funktioniert, aber jetzt erklär mir bitte warum es geht ohne die "thens"? ![]() ![]() btw. was bedeutet ihr "flushmouse()" bzw. was ist dessen genaue Funktion? |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Then ist optional und dient, wird es denn eingesetzt, lediglich der Übersicht. In früheren Basicdialekten war es vielleicht auch Pflicht, ich glaube mich erinnern zu können das man es beim C64 sogar schreiben musste. Bin da aber nicht mehr 100% sicher ![]() ql:FlushMouse() löscht den Mausbuffer. Alle Mausklicks werden ja bis zum Abruf durch MouseHit() gebuffert und mit FlushMouse() kann man eben diesen Buffer auskippen. Inwieweit das in Deinem bisherigen Code Sinn machen sollte versteh ich aber auch nicht ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die kompetente Hilfe ^^
Wann wäre denn Flushmouse sinnvoll? |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] print "hallo!" Waikey() ;Flushkeys() print "tschüss" waitkey() da zum beispiel! warum? Computer sind so schnell, das sie wenn du einmal eine Taste drücktst gleich tausende signale ( veilleicht auch weniger keine Ahnung) empfangen, das erste aber wird nur zum beenden des ersten waitkeys benutzt, so benutz er gleich das nächste signal was aber ja auch noch vom ersten tastendruck kam für das nächste waitkey was ja nicht erwünscht ist, so musst du halt zwishen durch den buffer (der alle nicht verarbeiteten signale speichert) löschen. MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
5k41 hat Folgendes geschrieben: Code: [AUSKLAPPEN]
print "hallo!" Waikey() ;Flushkeys() print "tschüss" waitkey() da zum beispiel! warum? Computer sind so schnell, das sie wenn du einmal eine Taste drücktst gleich tausende signale ( veilleicht auch weniger keine Ahnung) empfangen, das erste aber wird nur zum beenden des ersten waitkeys benutzt, so benutz er gleich das nächste signal was aber ja auch noch vom ersten tastendruck kam für das nächste waitkey was ja nicht erwünscht ist, so musst du halt zwishen durch den buffer (der alle nicht verarbeiteten signale speichert) löschen. MfG Danke ![]() Falls noch fragen sind, werde ich mich erneut an euch wenden ^^ |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So da bin ich wieder:
habe in meinem Programm eine "Geschlechterabfrage" eingebaut nun mein Problem: Klicke ich einmal mit der Maus irgendwo hin und fahre dann über Auwahlbutton für "weiblich" wird es selektiert, bei "männlich klappt es ganz normal. Hatte es auch schon mit "Else If" probiert, irgendwie mache ich da nen Denkfehler ![]() Hier mein Code: Code: [AUSKLAPPEN] ;Geschlechterwahl
If neuesspiel_name_wert$(1,1) = 2 Then Color 0,0,0 Oval 175,145,10,10,0 Color 255,255,255 Oval 176,146,8,8,1 Color 0,0,0 Text 196,139, "Männlich" Color 0,0,0 Oval 175,165,10,10,0 Color 255,255,255 Oval 176,166,8,8,1 Color 0,0,0 Text 196,159, "Weiblich" Color 118,118,118 Rect 296,149,36,22,1 Color 0,0,0 Rect 296,149,36,22,0 Text 306,149, "OK" End If If ImageRectCollide(mauszeiger,mx,my,0,176,146,8,8) Then If MouseHit(1) Then neuesspiel_geschlecht_wert$(1,0) = "mann" neuesspiel_geschlecht_wert$(1,1) = 1 End If End If If ImageRectCollide(mauszeiger,mx,mx,0, 176,166,8,8) Then If MouseHit(1) Then neuesspiel_geschlecht_wert$(1,0) = "frau" neuesspiel_geschlecht_wert$(1,1) = 1 End If End If Text 200,200, "" + neuesspiel_geschlecht_wert$(1,0) If neuesspiel_geschlecht_wert$(1,0) = "mann" Then Color 0,0,0 Oval 175,145,10,10,0 Oval 176,146,8,8,1 Else If neuesspiel_geschlecht_wert$(1,0) = "frau" Then Color 0,0,0 Oval 175,165,10,10,1 End If End If ;Ende Andere Frage: Was würdet ihr empfehlen: Rect/Oval + Text + ImageRectCollide zur Auswahl oder doch alles mit Grafiken und imagesCollide? |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm, du überprüfst 2mal MouseHit(1), ich glaub beim ersten mal überprüfen löscht der dann das Mousehit, du könntest MouseHit in ne Variable abspeichern, also am anfang mh1=MouseHit(1)
Aber ich hab das ganze jetzt mal so gelöst, sollte funktionieren^^ Code: [AUSKLAPPEN] ;Geschlechterwahl
If neuesspiel_name_wert$(1,1) = 2 Then Color 0,0,0 Oval 175,145,10,10,0 Color 255,255,255 Oval 176,146,8,8,1 Color 0,0,0 Text 196,139, "Männlich" Color 0,0,0 Oval 175,165,10,10,0 Color 255,255,255 Oval 176,166,8,8,1 Color 0,0,0 Text 196,159, "Weiblich" Color 118,118,118 Rect 296,149,36,22,1 Color 0,0,0 Rect 296,149,36,22,0 Text 306,149, "OK" End If If MouseHit(1) If ImageRectCollide(mauszeiger,mx,my,0,176,146,8,8) neuesspiel_geschlecht_wert$(1,0) = "mann" neuesspiel_geschlecht_wert$(1,1) = 1 ElseIf ImageRectCollide(mauszeiger,mx,mx,0, 176,166,8,8) neuesspiel_geschlecht_wert$(1,0) = "frau" neuesspiel_geschlecht_wert$(1,1) = 1 End If End If Text 200,200, "" + neuesspiel_geschlecht_wert$(1,0) If neuesspiel_geschlecht_wert$(1,0) = "mann" Then Color 0,0,0 Oval 175,145,10,10,0 Oval 176,146,8,8,1 ElseIf neuesspiel_geschlecht_wert$(1,0) = "frau" Then Color 0,0,0 Oval 175,165,10,10,1 End If ;Ende |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke es klappt ^^
Aber meine andere Frage: Zitat: Was würdet ihr empfehlen: Rect/Oval + Text + ImageRectCollide zur Auswahl oder doch alles mit Grafiken und imagesCollide? is immer noch offen ![]() |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
also für ein menü würde ich ma sagen, es ist scheiß egal^^
also performance geht da nich verloren bei 3 oder 4 menü punkten^^ es kommt denk ich auch mal drauf an, ob du das alles n bissl universell machen willst, also ich persöhnlich würde bilder benutzen ![]() ![]() |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ChAoS|DrAgOn hat Folgendes geschrieben: also für ein menü würde ich ma sagen, es ist scheiß egal^^
also performance geht da nich verloren bei 3 oder 4 menü punkten^^ es kommt denk ich auch mal drauf an, ob du das alles n bissl universell machen willst, also ich persöhnlich würde bilder benutzen ![]() ![]() Also ist es performancemäßig egal? Dachte wenn ich weniger Bilder benutze, habe ich auch weniger Variablen und es sieht bissn übersichtlicher "professioneller" aus ![]() Bilder wären sicher auch net schlecht, da die Grafiken alle von nem Kumpel erstellt bzw. meine Dummy Grafiken mit seinen ersetzt werden sollen. |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
O, ich nehm ma zurück was ich da gesagt habe, aber Performance mäßig ist es wirklich scheiß egal^^ Naja, es sei denn du machst ein Hyper Krasses Menü mit ein paar hundert animierte Buttons mit komplizierten berechnungen, was dann aber besser ist, weiß ich nicht genau^^
So, also: 1. Es ist schonmal wichtig zu wissen, was das für ein Hauptmenü sein soll, sollen die Buttons starr sein, wie Windows Buttons o.Ä. oder sollen die sich bewegen, Scalen, drehen, was auch immer. beim skalieren sind bilder denk ich ma angebrachter beim starr ist vlt ein Button ohne text als bild angebracht und dann einfach mit Text x,y,"blabla",1,1 oder so das gewünschte raufmachen.... 2. Muss das ganze eigentlich bei mehreren Buttons recht universel zu machen sein, zum beispiel baust du dir ein type mit buttons oder ein array, musst du selebr wissen, kommt halt drauf an, ob du vorher schon weißt, wieviel buttons du machen willst.... und dann brauchst du auch nicht viele Variablen... halt einfach ne funktion schreiben wie CreateButton(x,y,text$,id_nummer) 3. hab ich vergessen^^ MfG ChAoS|DrAgOn |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke ich probiers mal aus ![]() |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sorry fürn Doppelpost, aber anders sieht es ja keiner mehr ^^
So weiteres "Problem": ![]() Eigentlich sehen die Bilder ganz anders aus, ich zeichne sie mit einem Drawimage, verwende ich stattdessen ein Drawblock klappt es einwandfrei... Weiß einer Rat? ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mask Color vielleicht Mal versuchen zu wechseln? Weil Default ist die ja 0,0,0 was dazu führt das ganz schwarze teile des Menüs "verschwinden" | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Mask Color vielleicht Mal versuchen zu wechseln? Weil Default ist die ja 0,0,0 was dazu führt das ganz schwarze teile des Menüs "verschwinden"
So wie ich das gesehen habe, muss man bei jedem Bild mit "Maskimage" eine Transparenzfarbe festlegen, aber ich habe für die Bilder nix festgelegt oder gibs irgendwo einen "allgemeingültigen" Befehl? |
||
![]() |
Thorsten |
![]() Antworten mit Zitat ![]() |
---|---|---|
es ist ja auch nicht maskIMAGE sondern maskCOLOR gemeint, maskcolor gilt für alles (?) und ist default, also standardmäßig auf 0,0,0 gesetzt!
cya, BlindGuy |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BlindGuy hat Folgendes geschrieben: es ist ja auch nicht maskIMAGE sondern maskCOLOR gemeint, maskcolor gilt für alles (?) und ist default, also standardmäßig auf 0,0,0 gesetzt!
cya, BlindGuy Den Befehl gibt es aber nicht ![]() Gebe ich maskcolor 255,0,255 ein, kommt der Fehler "Function MaskColor not found" |
||
Lastsamurai |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aber auch wenn du garnichts festgelegt hast bei MaskImage werden die schwarzen Bereiche in allen Bildern verschwinden, denn wenn man keine Transparente Farbe benutzt legt Blitz für die transparente Farbe automatisch
den RGB Wert 0,0,0 (schwarz ^^) Also bei jedem Bild: MaskImage Bild,x,y,z Hat eigentlich Dreamora schon alles geschrieben... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group