Menü mit beweglichen buttons

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

iratus

Betreff: Menü mit beweglichen buttons

BeitragDo, Nov 24, 2005 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
ich habe mir vorgenommen für mein kleines programm ein menü mit beweglichen buttons zu machen. so weit klappt das auch, aber wenn man die maus zu schnell bewegt verliert man den button.
hier mal der code:
BlitzBasic: [AUSKLAPPEN]
;define
W = 640
H = 480
Dim buttontext$(8)
Dim buttonX(8)
Dim buttonY(8)
Dim berechnet(8)
maus = 30

;screen
Graphics W,H,0,2
SetBuffer BackBuffer()
HidePointer

;graphics

;grafiken laden
hinter = LoadImage(\"1201.jpg\")
buttonB = LoadImage(\"metalBlue.png\")
buttonO = LoadImage(\"metalOrange.png\")
mouse = LoadImage(\"mouse.bmp\")
mouseP = LoadImage(\"mousedot.bmp\")
;grafiken verkleinern
ResizeImage hinter, W, H
ResizeImage buttonB, W*0.25, H*0.1
ResizeImage buttonO, W*0.25, H*0.1
ResizeImage mouse, maus, maus
ResizeImage mouseP, maus, maus
;transparentsfarbe ändern
MaskImage buttonB, 255, 255, 255
MaskImage buttonO, 255, 255, 255
MaskImage mouse, 128, 128, 128
MaskImage mouseP, 128, 128, 128
;grafiken zentrieren
MidHandle buttonB
MidHandle buttonO
MidHandle mouse
MidHandle mouseP


;start
Repeat
X = MouseX()
Y = MouseY()
Xspeed = MouseXSpeed()
Yspeed = MouseYSpeed()
DrawImage hinter, 0, 0
Menu1 = 3 : buttontext(1) = \"Start\" : buttontext(2) = \"Hilfe\" : buttontext(3) = \"Beenden\" : Gosub drawbutton
DrawImage mouse, X, Y
DrawImage mouseP, X, Y
Flip
Cls
Until KeyDown(1)

End





.drawbutton

abstand = (H-Menu1)/(Menu1+1)

For i = 1 To Menu1

collide = ImagesCollide(mouseP, X, Y, 0, buttonB, buttonX(i), buttonY(i), 0)

If berechnet(i) = 0 Then
buttonX(i) = W/2
buttonY(i) = i*abstand
berechnet(i) = 1
EndIf

If collide = 1 And MouseDown(1) = 1 Then bewegen = 1
If collide = 1 And MouseDown(1) = 0 Then bewegen = 0
If collide = 0 And MouseDown(1) = 1 Then bewegen = 0
If collide = 0 And MouseDown(1) = 0 Then bewegen = 0

If bewegen = 1 Then
buttonX(i) = buttonX(i) + Xspeed
buttonY(i) = buttonY(i) + Yspeed
EndIf

If collide = 0 Then DrawImage buttonB, buttonX(i), buttonY(i)
If collide = 1 Then DrawImage buttonO, buttonX(i), buttonY(i)

Color 0, 0, 0
Text buttonX(i), buttonY(i), buttontext(i), 1, 1

Next
Return


achja die grafiken und die die bb datein hab ich auch noch mal in einer zip-file auf meinen webspace geladen, da das ganze sonst net klappt.
hier der link : http://home.arcor.de/iratus90/Menue.zip

bitte helft mir aus dem code ein bissel mehr performance raus zu holen...

mfg iratus

sirokuhl

BeitragDo, Nov 24, 2005 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
das liegt daran, dass die maus, wenn sie sich bewegt, eigentlich nur von einem ort zum nächsten springt.
das läuft ja auch nur in einer schleife ab. und um so schneller du die maus bewegst desto weiter springt sie auf einmal.
und wenn du sie zu schnell bewegst springt sie soweit, dass sie nicht mehr mit dem button kollidiert und dieser somit nicht mehr mitkommt.

verstanden??

die maus bewegt sich nicht von einem pixel zum benachbarten sondern überspringt eben einige pixel.

jetzt verstanden??

FireballFlame

BeitragFr, Nov 25, 2005 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Tip: Speichere die Mauskoordinaten in Variablen, sodass du beim nächsten Schleifendurchlauf auch auf die alten Koords Zugriff hast und prüfe wenn keine Kollision festgestellt wurde zusätzlich auf Kollision mit "(MausX+MausX_alt)/2)" und "(MausY+MausY_alt)/2)"!
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

Florian

BeitragFr, Nov 25, 2005 23:39
Antworten mit Zitat
Benutzer-Profile anzeigen
-Code geändert
-alle Fehler entfernt

Demo

BlitzBasic: [AUSKLAPPEN]


Type TButton
Field Text$
Field X,Y
End Type


Global Button.TButton
Global ButtonSchrift
Global ButtonSchriftFarbe

Global ButtonImage
Global MenuHintergrund

Global MausImage


Global MausX
Global MausY
Global MausXSpeed
Global MausYSpeed
Global MausDown

Global MausUeberButton

Global Timer=CreateTimer(75)

Graphics 640,480
SetBuffer BackBuffer()


MenuHintergrund=LoadImage(\"1201.jpg\")
InstButton(\"Button.png\",218,55,Farbe(255,255,255),\"\",0,24)
CreateButton \"Start\",200,100
CreateButton \"Hilfe\",200,200
CreateButton \"Ende\" ,200,300
MausImage=LoadImage(\"Maus.PNG\")


While Not KeyDown(1)
UpdateMenue
Wend

Function UpdateMaus()
MausX=MouseX()
MausY=MouseY()

MausXSpeed=MouseXSpeed()
MausYSpeed=MouseYSpeed()
MausDown=MouseDown(1)
End Function


Function UpdateMenue()
DrawBlock MenuHintergrund,0,0
UpdateMaus
UpdateButton
DrawButton
DrawImage MausImage,MausX,MausY

WaitTimer Timer
Flip
End Function

Function UpdateButton()
If MausDown=False Then
MausUeberButton=0
End If

For Button=Each TButton
If ImagesCollide(MausImage,MausX,MausY,0,ButtonImage,Button\X,Button\Y,0) And MausUeberButton=0 Or MausUeberButton=Handle(Button) Then
MausUeberButton=Handle(Button)
If MausDown=True Then
Button\X=Button\X+MausXSpeed
Button\Y=Button\Y+MausYSpeed
EndIf
EndIf
Next
End Function

Function CreateButton(Text$,X=-1,Y=-1)
Button=New TButton
Button\Text$=Text$

If X=-1 Then
X=GraphicsWidth()/2
EndIf

If Y=-1 Then
Y=GraphicsHeight()
EndIf

Button\X=X
Button\Y=Y
Return Handle(Button)
End Function

Function DeleteButton(OBJ)
Button=Object.TButton(OBJ)
Delete Button
End Function

Function InstButton(ButtonImageName$,ButtonX,ButtonY,ButtonMaske,Schrift$,SchriftFarbe,SchriftHoch=14)
ButtonImage=LoadAnimImage(ButtonImageName$,ButtonX,ButtonY,0,2)
If ButtonImage=0 Then Return

MaskImage ButtonImage,GetRed(ButtonMaske),GetGreen(ButtonMaske),GetBlue(ButtonMaske)

MidHandle ButtonImage

ButtonSchrift=LoadFont(Schrift$,SchriftHoch)
ButtonSchriftFarbe=SchriftFarbe

Return True
End Function

Function DrawButton()
SetFont ButtonSchrift
ColorI ButtonSchriftFarbe

For Button=Each TButton
If MausUeberButton<>Handle(Button) Then
DrawImage ButtonImage,Button\X, Button\Y,0
Text Button\X, Button\Y,Button\Text$,True,True
End If
Next

If MausUeberButton<>0 Then
For Button=Each TButton
If MausUeberButton=Handle(Button) Then
DrawImage ButtonImage,Button\X, Button\Y,1
Text Button\X, Button\Y,Button\Text$,True,True
EndIf
Next
EndIf

End Function

Function Farbe(r,g,B)
Return r*$10000 + g*$100 + b
End Function

Function ColorI(I)
Color (I And $FF0000)/$10000,(I And $FF00)/$100,I And $FF
End Function

Function GetRed(I)
Return (I And $FF0000)/$10000
End Function

Function GetGreen(I)
Return (I And $FF00)/$100
End Function

Function GetBlue(I)
Return I And $FF
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group