mausgesteuertes Menü

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

jokerman29

Betreff: mausgesteuertes Menü

BeitragSa, Jan 23, 2010 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi leutz,
ich versuch grad ein mausgesteuertes Menü in B3D zu machen (für ein spiel)
leider funktz nicht Sad und ich finde den fehler nicht, hoffentlich findet ihr ihn:
Code: [AUSKLAPPEN]

AppTitle "Menü"
Graphics 640,480,32,2
SetBuffer BackBuffer()
HidePointer

;globale
Global MX = MouseX()
Global MY = MouseY()

spielen = LoadImage("C:\Users\David\Desktop\Blitzbasic\Menü\spielen.bmp")
ScaleImage spielen, 0.5,0.5
pfeil = LoadImage("C:\Users\David\Desktop\Blitzbasic\Menü\pfeil.bmp")
ScaleImage pfeil, 0.15,0.15
RotateImage pfeil, 45

spielenw = ImageWidth(spielen)
spielenh = ImageHeight(spielen)

While Not Keyhit(1)
Cls

DrawImage spielen, 215,50

If RectsOverlap(MX,MY,1,1,215,50,spielenw,spielenh) And MouseDown(1) Then Text 0,0, "kollision"
 
DrawImage pfeil, MX,MY   
Flip
Wend
End

Normalerweise würde wenns fertig ist nicht Kollision stehen, sondern das Menü würde weitergehen und das hier ist auch nur ein teil des Menüs.
seht ihr den Fehler??
mfg
jokerman29
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!

Rechtschreibfehler sind special-effekts meiner Tastatur Wink

M0rgenstern

BeitragSa, Jan 23, 2010 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, es wäre schön, wenn du genau beschreiben würdest, was denn "Nicht funktioniert", denn im Forum gibts Afaik keine Hellseher.

Aber an deinem Code glaube ich schon zu sehen, was nicht funtzt.
Lass mich raten: Die Maus bewegt sich nicht?

Du musst die Zeilen:

Code: [AUSKLAPPEN]
Global MX = MouseX()
Global MY = MouseY()


Ohne das Global davor nochmal an den Anfang deiner Hauptschleife schreiben (hinter CLS).
Dann müsste es funktionieren.
Der Fehler liegt nämlich momentan darin, dass du die Mauskoordinaten nur einmal in die Variablen übergiebst und danach nicht mehr. Das heißt, wenn die Maus bewegt wird dann bekommt das Programm das nicht mit, weil es kein "update" der Mauskoordinaten bekommt.

Noch was nebenbei:
Du solltest keine absoluten Pfade für Bilder etc nutzen sondern nur relative.

Lg, M0rgenstern

jokerman29

BeitragSa, Jan 23, 2010 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
oh, entschuldigung, da ahb ich das wichtigste vergessen:
der fehler ist garnicht das mit der Maus, die bewegt sich super, nur wenn ich mit der linken maustaste auf das bild "spielen" drücke, sollte eig. oben links "Kollision" stehen, doch das tut es nicht Sad
weis wer warum?
mfg
jokerman
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!

Rechtschreibfehler sind special-effekts meiner Tastatur Wink

M0rgenstern

BeitragSa, Jan 23, 2010 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Tu mir mal Bitte den Gefallen und setz ein Code: [AUSKLAPPEN]
MX = mousex()
MY = Mousey()
hinter den CLS.
Du bist nämlich im fenstermodus und da könnte es (trotz HidePointer) die Windowsmaus sein die du siehst.

Ansonsten versuch mal vor die If Abfrage an Color 250, 250, 250 zu setzen, vielleicht liegts auch daran.

Ansonsten vielleicht mal XWidth und XHeight für die maus bei Rectsoverlap ein wenig vergrößern.

Lg, M0rgenstern
 

BadDeath

BeitragSa, Jan 23, 2010 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Trotzdem musst du ja die aktuellen Werte für die Mauskoordinaten abfrgen, wie du das am Anfang der Schleife schon machst:
Code: [AUSKLAPPEN]
Global MX = MouseX()
Global MY = MouseY()


Das musst du nun, wie Morgenstern schon meinte, auch in die Schleife setzen. Sonst überprüfst du ja jedes Mal die Stelle, an der die Maus beim Programmstart war.

Edit: Zu spät.....
-~= real coders just code in binary =~-

jokerman29

BeitragSa, Jan 23, 2010 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich hab MX und MY hinter das CLS gesetzt und es funkzt =)
vielen Dank euch
mfg
jokerman29
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!

Rechtschreibfehler sind special-effekts meiner Tastatur Wink

M0rgenstern

BeitragSa, Jan 23, 2010 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, aber das kann ich mir jetzt nicht verkneifen:

Glaub doch einfach mal was, wenn man es dir sagt.
Das hat man an deinem Code gesehen.
MX und MY haben nie mehr neue Koordinaten erhalten.
Da lag das Problem.

Lg, M0rgenstern

das wurgel

BeitragSa, Jan 23, 2010 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du Mal ausprobiert was M0rgenstern dir gesagt hat? Warscheinlich ist die Maus die du siehst nur die Windowseigene Maus und nicht die, die du programmiert hast. Schreib Mal HidePointer() vor die Hauptschleife und guck, ob die Maus immernoch funktioniert. So wie du es geschrieben hast nimmt RectsOverlap immer nur die Mauskoordinaten, die du am Anfang des Programms ausgelesen hast und nicht die aktuellen. Ansonsten müsste alles funktionieren.

MfG

Edit: Ach verdammt, wie schnell schreibt ihr denn alle!?
1 ist ungefähr 3

jokerman29

BeitragSa, Jan 23, 2010 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
@ morgenstern:
ich hab doch das getan was du gesagt hast und deswegen funkzt es ja auch.
@ das wurgel:
siehe oben Wink
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!

Rechtschreibfehler sind special-effekts meiner Tastatur Wink

Chrissa

BeitragSa, Jan 23, 2010 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier noch n kleinen Tipp von mir:
du musst MoueX und MouseY nicht in Variablen speichern. Das macht es nur kompliziert. Bei den Kollisionsabfragen oder bei Updaten der maus kannst du stattdessen auch immer MouseX() und MouseY() schreiben. Dann hast du weniger Gewurstel mit den Variablen Wink


Lg

jokerman29

BeitragSa, Jan 23, 2010 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
achso oki, ich merks mir Wink
mfg
jokerman29
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!

Rechtschreibfehler sind special-effekts meiner Tastatur Wink

hazumu-kun

BeitragSa, Jan 23, 2010 23:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@Chrissa:
Das sollte man aus Performance gründen aber trotzdem machen, einmal MouseX/-Y aufrufen und dann nurnoch auf Variablen zugreifen ist deutlich schneller als jedemal neu abzufragen.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group