Button wollen nich wie ich will

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Basati

Betreff: Button wollen nich wie ich will

BeitragFr, Feb 03, 2006 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
hi!

also ich hab da ein menü gemacht und es sieht ganz groß aus, und auf den ersten knopf kann ich auch drücken und es passiert auch was! aba bei allen drei weiteren tut sich nix! wenn ich aba denn code für den ersten button auskommentiere klappt der darunter! mit anderen worten es klappt immer nur der oberste! und nebenbei weiter zwei fragen:
warum funktioniert der cls befehl nicht im follbild modus?
und hat jemand ne formel mit der man die grafiken variabel zu der auflösung anordnen kann? denn x_wert für die positionierung hab ich, aba denn rest krig ich nich raus!

viele fragen!! Very Happy

Code: [AUSKLAPPEN]

Global aufx=800
Global aufy=600

Graphics aufx,aufy, 32
SetBuffer BackBuffer()
Cls

;---------------Images laden--------------
back=LoadImage("pics\back.jpg")
maus=LoadImage("pics\maus.bmp")
start=LoadImage("Pics\start.jpg")
high=LoadImage("Pics\high.jpg")
opti=LoadImage("Pics\opti.jpg")
ende=LoadImage("pics\ende.jpg")


;---------------Menü schleife anfang--------------
Repeat
Cls


;---------------Maus position--------------
mausx=MouseX()
mausy=MouseY()

;---------------Buttons zeichnen--------------
DrawImage back, 0, 0
DrawImage start, aufx/2-100, 100
DrawImage opti, aufx/2-100, 208
DrawImage high, aufx/2-100, 316
DrawImage ende, aufx/2-100, 424


;---------------Maus zeichnen--------------
DrawImage maus, mausx-16, mausy-16




;---------------start button---------------
If MouseHit(1) And mausx>aufx/2-100 And mausx<aufx/2+100 And mausy>100 And mausy<175 Then
Cls
Print "START"
WaitKey
End
EndIf

;---------------optionen button---------------
If MouseHit(1) And mausx>aufx/2-100 And mausx<aufx/2+100 And mausy>208 And mausy<283 Then
Cls
Print "OPTIONEN"
WaitKey
End
EndIf

;---------------highscore button---------------
If MouseHit(1) And mausx>aufx/2-100 And mausx<aufx/2+100 And mausy>316 And mausy<391 Then
Cls
Print "HIGHSCORE"
WaitKey
End
EndIf

;---------------ende button---------------
If MouseHit(1) And mausx>aufx/2-100 And mausx<aufx/2+100 And mausy>424 And mausy<499 Then
Cls
Print "Tschööööööööööö!"
WaitKey
End
EndIf




If KeyHit(1) Then
End
EndIf
flip
;---------------Menü schleife ende--------------
Forever



thx for help

BtbN

BeitragFr, Feb 03, 2006 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz einfach: du rufst MouseHit mehrmals auf!
Speicher seinen Wert am Anfang in einer Variable, und benutz diese in den IFs, schon geht alles.

Basati

BeitragFr, Feb 03, 2006 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
das musst du mir etwas genauer erklären!!
meinst du etwa so:


if mousehit(1) then
prüfe koordinaten

?????
 

HW

BeitragFr, Feb 03, 2006 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Global aufx=800
Global aufy=600

Graphics aufx,aufy, 32
SetBuffer BackBuffer()

;---------------Images laden--------------
back=LoadImage("pics\back.jpg")
maus=LoadImage("pics\maus.bmp")
start=LoadImage("Pics\start.jpg")
high=LoadImage("Pics\high.jpg")
opti=LoadImage("Pics\opti.jpg")
ende=LoadImage("pics\ende.jpg")


;---------------Menü schleife anfang--------------
Repeat
Cls


;---------------Maus--------------
mausx=MouseX()
mausy=MouseY()
maushit=MouseHit(1)

;---------------Buttons zeichnen--------------
DrawImage back, 0, 0
DrawImage start, aufx/2-100, 100
DrawImage opti, aufx/2-100, 208
DrawImage high, aufx/2-100, 316
DrawImage ende, aufx/2-100, 424


;---------------Maus zeichnen--------------
DrawImage maus, mausx, mausy




;---------------start button---------------
If maushit And ImageRectOverlap(start,aufx/2-100,100,MouseX(),MouseY(),1,1)
Cls
Print "START"
WaitKey()
End
EndIf

;---------------optionen button---------------
If maushit And ImageRectOverlap(opti,aufx/2-100,208,MouseX(),MouseY(),1,1)
Cls
Print "OPTIONEN"
WaitKey()
End
EndIf

;---------------highscore button---------------
If maushit And ImageRectOverlap(high,aufx/2-100,316,MouseX(),MouseY(),1,1)
 
Cls
Print "HIGHSCORE"
WaitKey()
End
EndIf

;---------------ende button---------------
If maushit And ImageRectOverlap(ende,aufx/2-100,424,MouseX(),MouseY(),1,1)

Cls
Print "Tschööööööööööö!"
WaitKey()
End
EndIf

Flip
;---------------Menü schleife ende--------------
Until KeyHit(1)
End

Hier dein Code, in modifizierter Form. Habe ihn aber nicht getestet, da ich die Bilder nicht habe.
Noch ein Tipp: Du solltest beim Zeichenbefehl für die Maus nicht darauf achten, dass der Zeiger in der Mitte gemalt wird. Schließlich hat man einen Pfeil, dessen Spitze in der linken oberen Ecke (da, wo gezeichnet wird) auf das zeigt, was geprüft werden soll. Anders ist es natürlich, wenn du ein Fadenkreuz o.Ä. hast.
Aber wie du das mit den Grafikvariablen meinst, verstehe ich nicht.

Basati

BeitragFr, Feb 03, 2006 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
cool! danke!
damit is das erste problem gelöst!
mkay das mit der formel is etwas schwer aba egal!

das mit der formel is so das wenn ich die buttons mit zahlen festlege wie oben dann kann ich nich die auflösung andern, weil dann die buttons nich mehr in der mitte des bildschirms sind sondern halt an denn festen positionen!

ps: der mauszeiger ist ein fadenkreutz!!! Very Happy
  • Zuletzt bearbeitet von Basati am Fr, Feb 03, 2006 20:17, insgesamt einmal bearbeitet
 

HW

BeitragFr, Feb 03, 2006 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sollte dir besser noch sagen, was die wichtigste Änderung ist: Am Anfang der Schleife wird in einer Variable (maushit) gespeichert, ob die Maustaste gedrückt wurde. Dann wird bei den Buttons jeweils geprüft, ob diese Variable "Wahr" oder "Falsch" aussagt.
Das Problem lag daran, dass Mousehit(button), Keyhit(scancode) und Joyhit(button) zurückgeben, wie oft eine Taste seit dem letzten Aufruf der jeweiligen Funktion gedrückt wurde. Bei einer Schleife muss/sollte man das in einer Variable speichern, da sonst geprüft wird, ob nach dem vorherigen Mousehit(1) schon die Taste gedrückt wurde.

Was die Auflösung angeht: Bei den X-Werten hast du es ja schon richtig. Du musst es nur noch in die Y-Werte übertragen.

Und wegen dem Mauszeigerfadenkreuz: Nach dem Befehl für das Laden des Bildes gibst du´
Code: [AUSKLAPPEN]
MidHandle maus

ein. Dann wird das Bild automatisch in der Mitte gezeichnet und du kannst den Code von oben übernehmen.
 

Blackdragon1989

BeitragFr, Feb 03, 2006 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab keine Antwort auf die Frage habe selber eine...
@HW Ich habe das auch mal probiert mit dem maushit = MouseHit(1)
aber bei mir geht das nich kann mir einer sagen was ich da falsch gemacht habe ?Hier der Code
Code: [AUSKLAPPEN]
Graphics 640,480,16,1
SetBuffer BackBuffer() 
HidePointer
;Variabeln laden
 ;Bilder laden
  Global  Fadenkreuz = LoadImage("Fadenkreuz.bmp")     ;Fadenkreuz
  MaskImage Fadenkreuz ,0,0,255                        ;Fadenkreuz
  Global  Menübg = LoadImage("Menü.bmp")               ;Menü Hintergrund
  Global  Button_Start = LoadImage("start.bmp")        ;Start Button im Menü
  Global  Button_Steuerung = LoadImage("steuerung.bmp");Steuerung Button im Menü
  Global  Button_Beenden = LoadImage("beenden.bmp")    ;Beenden Button im Menü
  Global  Panzer = LoadImage("Panzer.bmp")             ;Panzer
  MaskImage Panzer,0,0,255                             ;Panzer
  Global  Flugzeug = LoadImage("Flugzeug.bmp")         ;Flugzeug
  MaskImage Flugzeug,0,0,255                           ;Flugzeug 
  Global  Pause = LoadImage("Pause.bmp")               ;Pause
  MaskImage Pause,0,0,255                              ;Pause
  Global  Spielbg = LoadImage("background.bmp")        ;Hintergrund im Spiel
  Global  Steuerung = LoadImage("Ctrl.bmp")            ;Steuerungsbild
 ;Bilder laden ende
Mx   = MouseX() - 25
My   = MouseY() - 25
maushit = MouseHit(1)
Panzer_X = 640
Panzer_Y = 450
Flugzeug_X = 640
Flugzeug_Y = 100

;Variabeln laden ende

 Menü()


Function Menü()
 While Not KeyHit(1)
  Cls                                            ;Bildschirm löschen
  TileImage Menübg                               ;Menübild malen
  DrawImage Button_Start,220,200                 ;Start Button malen
  DrawImage Button_Steuerung,220,250             ;Steuerung Button malen
  DrawImage Button_Beenden ,220,300              ;Beenden Button malen
  DrawImage Fadenkreuz,MouseX()-25,MouseY()-25   ;Fadenkreuz malen
   ;Abfrage Start
  If ImagesCollide(Fadenkreuz,MouseX()-25,MouseY()-25,0, Button_Start,220,200,0) Then
   If maushit Then
    Exit
   EndIf
  EndIf
   ;Abfrage Steuerung
  If ImagesCollide(Fadenkreuz,MouseX()-25,MouseY()-25,0, Button_Steuerung,220,250,0) Then
   If maushit Then
    Steuerung()
   EndIf
  EndIf
   ;Abfrage Beenden
  If ImagesCollide(Fadenkreuz,MouseX()-25,MouseY()-25,0, Button_Beenden,220,300,0) Then
   If maushit Then
    Exit
   EndIf
  EndIf   
  Flip                                           ;Bildschirm Flippen
 Wend
End Function


Function Spiel()
End Function   

Function Steuerung()
Menü_an = 0
Cls
TileImage Steuerung
End Function 
User posted image

BtbN

BeitragFr, Feb 03, 2006 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde die Variable nicht am Anfang des Programms sondern immer in der Hauptschleife mit MouseHit füttern... Rolling Eyes
 

Blackdragon1989

BeitragFr, Feb 03, 2006 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke schön ! Very Happy
User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group