Icon menuleiste
Übersicht

EisrabeBetreff: Icon menuleiste |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich taste mich grad an die maussteuerung heran. für die steuerung meines kleinen spielchens habe ich 5 icons gemalt (47x47 pixel) und die mit gewissem abstand auf dem screen platziert. dann habe ich folgenden code geschrieben, der abfragt, ob und welches icon angewählt wurde. dabei habe ich mousehit(1) und die mousex() und mousey() funktionen benutzt, also die coordinaten squares der icons.
Code: [AUSKLAPPEN] Repeat Cls menu taste ; funktion prüft, ob die maus über einem icon war beim klick mischen cards=0 cards2player ; spieler bekommt karten If vorbei=0 Then ; vorbei = 0 wenn computer noch an Zug soll cards2comp ; comp bekommt karten WaitKey neu=0 ; neu = 0 wenn das Spiel bereits begonnen wurde End If If mouse_wahl = 5 Then ; rekorde zeigeliste ; lädt highscores und zeigt sie an neu=1 EndIf If Mouse_wahl = 1 Then ; icon start gedrückt If neu = 1 Then Goto neustart ; situationsabhängig neustart Else Goto weiter ; oder weiterspielen EndIf Until KeyHit(1) End ;--------- Datas -------------- .menucoords Data 550,5, 605,5, 550,105, 605,105, 660,55 ; x,y links oben der 5 icons ; --------- Funktionen ----------- Function taste() mouse_wahl = 0 While mouse_wahl = 0 ; prog wartet auf mousewahl If MouseHit(1) Then zx = MouseX() : zy = MouseY() ; speichern der x,y der mouse beim klick Restore menucoords For i=1 To 5 ; einlesen der coords der icons Read xa,ya : xe = xa+47 : ye = ya+47 ; xa= bereichsanfang, xe= bereichsende, 47x47 pixel If zw(zx,xa,xe) And zw(zy,ya,ye) Then mouse_wahl=i ; vergleich, ob mousexy innerhalb der icons Next EndIf Wend End Function Function zw(pruefzahl,start,ende) ; meine geniale Zwischen-test-funktion If pruefzahl >= start And pruefzahl <= ende Then ; testet, ob die prüfzahl zwischen 2 werten liegt Return True Else Return False End If End Function den code, der für die frage unwichtig ist, habe ich weggelassen, dies ist nur der maus-abfrage-schnipsel. Meine Frage: kann ich das auch eleganter löser? ich hbae das im Fenstermodus, weil ich da den windows mousezeiger nutzen kann. |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, ich würde das anders machen,
im Dim feld die coordinaten der icons speichern da sie ja immer an der gleichen stelle sind Code: [AUSKLAPPEN] Dim menu_icons_POS(5,1)
Restore menucoords For z = 1 To 5 Read menu_icons_POS(t,0) ; Xpos Read menu_icons_POS(t,1) ; Ypos Next .menucoords Data 550,5, 605,5, 550,105, 605,105, 660,55 ; x,y links oben der 5 icons dann würde ich die maus in eine Fuction abfragen Code: [AUSKLAPPEN] Function Maus_abfrage()
Mausklick = MouseHit(1) Maus_Pos_X = MouseX() Maus_Pos_Y = MouseY() End Function Die Abfrage der icon in einer Function Code: [AUSKLAPPEN] Function Icon_Abfrage() If Mausklick = 1 Then ; also nur den code abarbeiten wenn die Maustaste gedrückt wurde For t = 1 To 5 If RectsOverlap (menu_icons_POS (t,0),menu_icons_POS (t,1),47,47,Maus_Pos_X,Maus_Pos_Y,1,1) Then Return t End If Next End If Return 0 End Function mit Select kann dann abgefragt werden welche gedrückt wurde Code: [AUSKLAPPEN] Select Icon_Abfrage()
Case 0 ; keins geklickt Case 1 ; 1 icon geklickt Case 2 Case 3 Case 4 End Select |
||
[BB2D | BB3D | BB+]
|
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Rallimen schrieb:
im Dim feld die coordinaten der icons speichern da sie ja immer an der gleichen stelle sind ich hab sie doch in dim-arrays gespeichert Zitat: Rallimen schrieb:
Die Abfrage der icon in einer Function das hab ich doch auch gemacht. ich sehe da keinen unterschied, ausser, dass du statt der if-abfragen zum schluss select-case benutzt hast. was auch übersichtlicher ist (werde ich umändern), aber sonst das gleich macht und auch nicht kürzer oder logischer ist. ist halt ne andere schreibweise. und du hältst die rectsoverlap methode besser als meine zwischen-coordinaten-funktion? ich hatte gehofft, dass ich total auf dem holzweg wäre und es eine super einfache bequehme icon-anwahl-methode gibt. da bin ich von PROFAN aber anderes gewohnt. mit 1 befehl kann abgefragt werden, welcher button gedrückt wurde. in BB muss ich wohl alles "zu fuss" machen. PS: ätzend ist, dass funktionen nur TRUE oder FALSE zurückgeben. ich denke da an befehlen aus PROFAN: zb INC a was in basic a=a+1 ist in einer funktion wäre es cool (wenn es gehen würde) Code: [AUSKLAPPEN] a = 10 inc a print a ;----------- Function inc(variable_rauf) variable_rauf = variable_rauf +1 return variable_rauf End Function ; oder runter Function neg(variable_runter) variable_runter = variable_runter +1 return variable_runter End Function |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Functionen können jeden Wert zurück geben egal ob string oder Float oder short !
Alles ist möglich, allerdings nur eine Variable! Zitat: da bin ich von PROFAN aber anderes gewohnt. mit 1 befehl kann abgefragt werden, welcher button gedrückt wurde.
Ist doch jetzt dasgleiche mit der Icon_Abfrage() die lierfert dir genau zurück, welcher Icon gedrückt wurde wenn 0 zurück geliefert wird wurde keiner gedrückt! Das ist ein neuer Befehl wenn man so will In deiner Function Taste() liest die die Koordinaten doch immer neu ein , demnach sind diese Werte garnicht gespeichert , sonst würdest du doch die Variablen benutzten ? dann ruft du jedesmal noch eine Function auf um die Icongröße zu checken und ob das jetzt besser, schneller, einfacher, übersichtlicher,eleganter oder kürzer ist! Naja... Urteile selbst! |
||
[BB2D | BB3D | BB+]
|
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Graphics 800,600,16,2
logo = LoadImage("bjlogo.bmp") ; 513 x 178 icons = LoadAnimImage("bj_icons.bmp",47,47,0,5) MaskImage icons,0,0,255 MaskImage logo,255,255,255 ClsColor 255,255,255 SetBuffer BackBuffer() ; ---- prog ---- menu ; ---- prog end / jeden code weggelassen End Function menu() Cls DrawImage logo,1,1 DrawImage icons,550,5,0 DrawImage icons,605,5,1 DrawImage icons,550,105,2 DrawImage icons,605,105,3 DrawImage icons,660,55,4 Flip End Function ARGS!!! warum bekomme ich da den error: illegal memory adress??? wenn ich die drawImage-befehle nicht inner func habe, kommt die meldung nicht ! verstehe wer will ![]() bitte um erklärung ![]() |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Global logo = LoadImage("bjlogo.bmp") ; 513 x 178
Global icons = LoadAnimImage("bj_icons.bmp",47,47,0,5) das wird es sein |
||
[BB2D | BB3D | BB+]
|
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
bonk! danke 8) | ||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group