Icon menuleiste

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Eisrabe

Betreff: Icon menuleiste

BeitragDi, Jan 27, 2004 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Jan 27, 2004 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 27, 2004 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Jan 27, 2004 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jan 28, 2004 5:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Rolling Eyes
bitte um erklärung Crying or Very sad
ich habe einCode: [AUSKLAPPEN]
GOTO
und ich bin bereit es einzusetzen!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Jan 28, 2004 8:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jan 28, 2004 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
bonk! danke 8)
ich habe einCode: [AUSKLAPPEN]
GOTO
und ich bin bereit es einzusetzen!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group