Problem mit Menü

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Crono

Betreff: Problem mit Menü

BeitragDi, Jun 21, 2005 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, bin neu hier 8) Seit gut 5 Wochen hab ich BB und ich komm nichtmehr davon los Wink

Nun aber zu meinem Problem:

Ich arbeite gerade an einem Spiel. Das Menü war vorher mit Bilder und vielen IF´s. Ich dachte mir, das eine Maussteuerung angebracht währe und habe mal zum Testen und einarbeiten dieses kleine Programm geschrieben:

BlitzBasic: [AUSKLAPPEN]

; Test der Eingabefunktionen von Blitzbasic3D

AppTitle \"Test\"
Graphics 640, 480 ,16 ,2
SetBuffer BackBuffer()

Global x, y
Global Frames, FramesJeSekunde, ZaehlStart

HidePointer

Repeat
; Anfang Menu
Rect 10, 10, 200, 20, 0
Text 12, 12, \"Beenden\"
; Ende Menu
Color 255, 255, 255
x = MouseX()
y = MouseY()
Locate 5, 450
Write \"X: \"
Print x
Locate 5, 460
Write \"Y: \"
Print y
Text 330, 462, x
Text 355, 462, \"x\"
Text 365, 462, y
y = y / 2
x = x / 2
Rect 84, 449, 323, 12, 0
Rect 86, 451, x, 8
Rect 84, 460, 243, 12, 0
Rect 86, 462, y, 8
Frames = Frames + 1
If ZaehlStart + 1001 < MilliSecs() Then
FramesJeSekunde = Frames
Frames = 0
ZaehlStart = MilliSecs()
EndIf
Text 420, 445, FramesJeSekunde + \" FPS\"
If FramesJeSekunde > 98
FramesJeSekunde = 98
Text 525, 456, \"Max\"
End If
Delay 1
Rect 420, 460, 100, 10, 0
Rect 422, 462, FramesJeSekunde, 6
If FramesJeSekunde < 40 Then Text 535, 458, \"Slow\"
If FramesJeSekunde > 40 Then Text 535, 458, \"Fast\"
x = MouseX()
y = MouseY()
Color 255, 0, 0
Line x, y, x+8, y+0
Line x, y, x-8, y+0
Line x, y, x+0, y+8
Line x, y, x+0, y-8
Rect x, y, 1, 1
Color 255, 255, 255
If RectsOverlap (x-2, y-2, 5, 5, 10, 10, 200, 20)
mausklick = GetMouse() = 1
If mausklick = 1 Then End
Color 255, 0, 0
Text 12, 12, \"Beenden\"
Color 255, 255, 255
End If
Flip
Cls
Until GetMouse() = 2
End


Nun aber zum eigentlichen Problem:
1. Ich kann schonmal nicht beurteilen, ob das in ordung ist, oder ob es da in Sachen Geschwindigkeit noch etwas zu verbessern gibt.
2. Der Button Beenden: Wenn man ihn anklickt, passiert manchmal garnix, manchmal funzt er und manchmal nur nach einem schnellen doppelklick (daher meine ich auch, das das etwas langsam ist - obwohl es bei mir 50 fps hat)

Cu Crono
User posted image
 

Apocalyptic

BeitragDi, Jun 21, 2005 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Benutz Print, Write und Locate niemals bei Doublebuffering. Nimm Text dafür.

2. Speicher den Rückgabewert von Getmouse in eine Variable, und ruf GetMouse auf diese Weise nur einmal auf pro Schleifendurchgang auf. Ist das selbe Problem, dass auch bei MouseHit auftritt.

Aber wieso nimmst du nichtBlitzBasic: [AUSKLAPPEN]
mausklick=MouseHit(1)
oderBlitzBasic: [AUSKLAPPEN]
mausklick=MouseDown(1)
?
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]

Crono

BeitragDi, Jun 21, 2005 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke! Smile Ich werde es gleich mal verbessern.

Rect ist auch schneller als Line, das werde ich auch noch ausbessern

"Aber wieso nimmst du nicht..."
Der Befehl stand so in der Hilfe Confused

nachtrag: Aber der Beenden Button geht immer noch nicht...

Cu Crono
User posted image
 

Apocalyptic

BeitragDi, Jun 21, 2005 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht doch:BlitzBasic: [AUSKLAPPEN]

; Test der Eingabefunktionen von Blitzbasic3D

AppTitle \"Test\"
Graphics 640, 480 ,16 ,2
SetBuffer BackBuffer()

Global x, y
Global Frames, FramesJeSekunde, ZaehlStart

HidePointer

Repeat
Maus=GetMouse()
; Anfang Menu
Rect 10, 10, 200, 20, 0
Text 12, 12, \"Beenden\"
; Ende Menu
Color 255, 255, 255
x = MouseX()
y = MouseY()
Text 5, 450,\"X: \"+x
Text 5, 460,\"Y: \"+y
Text 330, 462, x
Text 355, 462, \"x\"
Text 365, 462, y
y = y / 2
x = x / 2
Rect 84, 449, 323, 12, 0
Rect 86, 451, x, 8
Rect 84, 460, 243, 12, 0
Rect 86, 462, y, 8
Frames = Frames + 1
If ZaehlStart + 1001 < MilliSecs() Then
FramesJeSekunde = Frames
Frames = 0
ZaehlStart = MilliSecs()
EndIf
Text 420, 445, FramesJeSekunde + \" FPS\"
If FramesJeSekunde > 98
FramesJeSekunde = 98
Text 525, 456, \"Max\"
End If
Delay 1
Rect 420, 460, 100, 10, 0
Rect 422, 462, FramesJeSekunde, 6
If FramesJeSekunde < 40 Then Text 535, 458, \"Slow\"
If FramesJeSekunde > 40 Then Text 535, 458, \"Fast\"
x = MouseX()
y = MouseY()
Color 255, 0, 0
Line x, y, x+8, y+0
Line x, y, x-8, y+0
Line x, y, x+0, y+8
Line x, y, x+0, y-8
Rect x, y, 1, 1
Color 255, 255, 255
If RectsOverlap (x-2, y-2, 5, 5, 10, 10, 200, 20)
mausklick = (Maus=1)
If mausklick = 1 Then End
Color 255, 0, 0
Text 12, 12, \"Beenden\"
Color 255, 255, 255
End If
Flip
Cls
Until Maus = 2
End
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]

skey-z

BeitragDi, Jun 21, 2005 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe nur bei folgender Zeile das letzte (=1) weggenommen und schon gings:

Code: [AUSKLAPPEN]

mausklick = GetMouse() = 1


in der nachfolgenden Zeile prüfst du ja schon auf mausklick=1, deshalb ist es auch überflüssig bzw. falsche Syntax, wenn du in es so machst wi in meinem gerade geschribenen code-tag
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

Apocalyptic

BeitragDi, Jun 21, 2005 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Das verändert nichts. Zwar geht es manchmal, wie Crono es erwähnte, manchmal aber auch nicht. Das liegt an dem zweimaligen Aufruf von GetMouse (s.o.).
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]

Crono

BeitragDi, Jun 21, 2005 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen vielen dank Very Happy Es funktioniert Wink

Cu Crono
User posted image

Hagbard

BeitragDo, Jun 23, 2005 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

sorry, wenn ich diesen Thread für meine Zwecke missbrauche, aber jetzt habe ich noch eine Frage:

Wozu Code: [AUSKLAPPEN]
mausklick = MouseDown(1)

und nicht einfach nur Code: [AUSKLAPPEN]
MouseDown(1)
???
[/syntax]
  • Zuletzt bearbeitet von Hagbard am Sa, Apr 17, 2010 16:05, insgesamt einmal bearbeitet

Artemis

BeitragDo, Jun 23, 2005 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
weil du mit erstem in einer variable speicherst, ob die mouse "down" ist!!
dann kannst du es überall mit der variable abfragen!!
bei letzterem fragst du es direkt über die function ab, und das geht nur einmal, da die werte nicht gespeichert werden!!

Crono

BeitragDo, Jun 23, 2005 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber das bräuchte ich ja hier eigentlich garnicht, oder? Ich kann doch hier die kürzere Form benutzen, da ich das ja nicht speichern muss, oder?

Cu Crono
User posted image

Spikespine

BeitragDo, Jun 23, 2005 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
1. ausführlich
BlitzBasic: [AUSKLAPPEN]
down = MouseDown(1)
If down=True Then
;bla
EndIf


2. Kürzer
BlitzBasic: [AUSKLAPPEN]
If MouseDown(1)[=True] Then ;=True kann hin, muss es aber nicht
;bla
EndIf


Erklärung: Eine Funktion wie mousedown liefert einen Wert zurück. Bei Mousedown kann dieser Wert entweder 1 (true) oder 0 (false) sein. 1 wird zurückgeliefert, wenn die maustaste gedrückt wird, 0 wenn sie nicht gedrückt wird.

eine If abfrage prüft ob die bedingung (hinter dem if) Wahr ist. wenn ja, werden die befehle bis zum endif asgeführt. also setze ich als bedingung "down = True" bzw. mousedown(1) = True.
Fertig

Spike Smile
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

Hagbard

BeitragFr, Jun 24, 2005 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, jetzt erkenne ich auch denn Sinn.
  • Zuletzt bearbeitet von Hagbard am Sa, Apr 17, 2010 16:05, insgesamt einmal bearbeitet

Crono

BeitragSa, Jun 25, 2005 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Very Happy

Cu Crono
User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group