Problem mit aufklappenden Menu

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Gray Fox

Betreff: Problem mit aufklappenden Menu

BeitragMi, Jul 19, 2006 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jul 20, 2006 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
EDIT: lol sry ist mist was ich geschrieben hab Embarassed

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 Laughing
 

Gray Fox

BeitragDo, Jul 20, 2006 6:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke es funktioniert, aber jetzt erklär mir bitte warum es geht ohne die "thens"? Very Happy Shocked

btw. was bedeutet ihr "flushmouse()" bzw. was ist dessen genaue Funktion?

Hubsi

BeitragDo, Jul 20, 2006 9:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
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 Very Happy Das Buffern und der Kram gilt natürlich auch für Joystick und Tastatur, die Flushfunktionen sind dann ql:FlushJoy() und ql:FlushKeys().
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Gray Fox

BeitragDo, Jul 20, 2006 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die kompetente Hilfe ^^

Wann wäre denn Flushmouse sinnvoll?

5k41

BeitragDo, Jul 20, 2006 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jul 20, 2006 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

Falls noch fragen sind, werde ich mich erneut an euch wenden ^^
 

Gray Fox

BeitragSa, Jul 22, 2006 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad

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

BeitragSa, Jul 22, 2006 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jul 22, 2006 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

ChaosCoder

BeitragSo, Jul 23, 2006 0:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Rolling Eyes ich weiß nich genau warum aber naja^^ sonst nimm einfach das, mit dem du besser umgehen kannst Wink
Projekte: Geolaria | aNemy
Webseite: chaosspace.de
 

Gray Fox

BeitragSo, Jul 23, 2006 1:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Rolling Eyes ich weiß nich genau warum aber naja^^ sonst nimm einfach das, mit dem du besser umgehen kannst Wink


Also ist es performancemäßig egal? Dachte wenn ich weniger Bilder benutze, habe ich auch weniger Variablen und es sieht bissn übersichtlicher "professioneller" aus Question

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

BeitragSo, Jul 23, 2006 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jul 23, 2006 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ich probiers mal aus Very Happy
 

Gray Fox

BeitragMo, Jul 24, 2006 8:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry fürn Doppelpost, aber anders sieht es ja keiner mehr ^^

So weiteres "Problem":

user posted image

Eigentlich sehen die Bilder ganz anders aus, ich zeichne sie mit einem Drawimage, verwende ich stattdessen ein Drawblock klappt es einwandfrei...
Weiß einer Rat? Embarassed
 

Dreamora

BeitragMo, Jul 24, 2006 9:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 24, 2006 9:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 24, 2006 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 24, 2006 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Gebe ich maskcolor 255,0,255 ein, kommt der Fehler "Function MaskColor not found"
 

Lastsamurai

BeitragMo, Jul 24, 2006 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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...

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group