kleines Menu/inventar problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: kleines Menu/inventar problem

BeitragMo, Apr 02, 2007 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi !!

Ich schau mir gerade an wie man menüs bzw. inventars macht. Ich möchte mein Menü am rechten rand des Bildschirms haben, wärend man das game im Hintergrund sieht. Das Problem ist das "makierkästchen" welches zwar makiert, jedoch das zuvor makierte nicht mehr ent - makiert Laughing (ist das Deutsch ?). Hmm blöde zu erklären ^^

ich weis, das das mit einem cls leicht behoben werden könnte, doch da wird ja der ganze Bildschirminhalt gelöscht einschließlich meines Spiels...


Bilder sagen mehr als 1000 worte : (uff zeilenumbrüche ^^)

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

;globals
Global menu_start_index = 1,menu_max_index = 7
Global menu_wahl = 1
Global menu_Anzahl = 8
Global menu_x = 450,menu_y=100
Global wahl = 1

;arrys
Dim a$(menu_anzahl)
 a$(1) = "Charakter"
 a$(2) = "Fähigkeit"
 a$(3) = "Ausrüsten"
 a$(4) = "Gegenstand"
 a$(5) = "Speichern"
 a$(6) = "Beenden"
 a$(7) = "info"


;/////////////////////////main\\\\\\\\\\\\\\\\\\\\\
Repeat

;menu [0 = Spielen ; 1 = pause/menu]
;----------------------------------;
 If KeyHit(57) Then menu = menu +1 ;
 If menu = 2 Then menu = 0         ;
;----------------------------------;

      If menu = 0 Then   
            Cls
            Rect 100,100,100,100,1

      ElseIf menu = 1 Then
            menu_y = 0
             menu_show()
      End If

Flip
Until KeyHit(1)
;---------------------------------------------------



Function menu_show()
;Cls        ;würde das hier eingebaut werden, wäre es kein problem(jedoch verschwindet das "spiel")

   ;der rahmen
   Color 255,255,255:Rect menu_x-10,menu_y-10,150,(menu_max_index+1)*15,0

       For i = menu_start_index To menu_start_index + menu_max_index
            name$ = a$(i)                                             ;der menu inhalt
             If wahl = i Then Color 90,120,150:Rect menu_x,menu_y,100,FontHeight() ;"makierkästchen"
              Color 255,255,255:Text menu_x,menu_y,name$                           ;menu inhalt ausgeben
            menu_y = menu_y +15                                                    ;damit nicht übereinander
      Next
 

If KeyHit(208) Then wahl = wahl +1               ;das makierkästchen steuern
If KeyHit(200) Then wahl = wahl -1

End Function


~Edit~ Das menu mit leer aufrufen Cool
mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

FWeinb

ehemals "ich"

BeitragMo, Apr 02, 2007 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
AM besten macht du das Menu mit Types da kannst dann nen Field machen das ID ist und dann kanst du ja in der
Code: [AUSKLAPPEN]

For m.Menu=Each Menu
IF m/ID=Markiertes_Feld Then
mach das und das
Endif
Next


mfg

ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

Florian

BeitragMo, Apr 02, 2007 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()



;globals
Global menu_start_index = 1,menu_max_index = 7
Global menu_wahl = 1
Global menu_Anzahl = 8
Global menu_x = 450,menu_y=100
Global wahl = 1
menu=1

Timer=CreateTimer(30)

;arrys
Dim a$(menu_anzahl)
a$(1) = "Charakter"
a$(2) = "Fähigkeit"
a$(3) = "Ausrüsten"
a$(4) = "Gegenstand"
a$(5) = "Speichern"
a$(6) = "Beenden"
a$(7) = "info"


;/////////////////////////main\\\\\\\\\\\\\\\\\\\\\
Repeat
Cls
;menu [0 = Spielen ; 1 = pause/menu]
;----------------------------------;
If KeyHit(57) Then menu = menu +1 ;


If menu = 2 Then menu = 0 ;
;----------------------------------;

If menu = 0 Then

Rect 100,100,100,100,1

ElseIf menu = 1 Then
menu_y = 0
menu_show()
End If
WaitTimer Timer
Flip
Until KeyHit(1)
;---------------------------------------------------



Function menu_show()
;Cls ;würde das hier eingebaut werden, wäre es kein problem(jedoch verschwindet das "spiel")

;der rahmen
Color 255,255,255:Rect menu_x-10,menu_y-10,150,(menu_max_index+1)*15,0

For i = menu_start_index To menu_start_index + menu_max_index
name$ = a$(i) ;der menu inhalt
If wahl = i Then
 Color 90,120,150
 Rect menu_x,menu_y,100,FontHeight() ;"makierkästchen"
EndIf

Color 255,255,255:Text menu_x,menu_y,name$ ;menu inhalt ausgeben
menu_y = menu_y +15 ;damit nicht übereinander
Next


If KeyHit(208) Then wahl = wahl +1 ;das makierkästchen steuern
If KeyHit(200) Then wahl = wahl -1
If Wahl=menu_anzahl Then Wahl=1
If Wahl=0 Then Wahl=menu_anzahl-1

End Function

 

FWeinb

ehemals "ich"

BeitragMo, Apr 02, 2007 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Florian Das was du gemacht hast wolte er doch grade nicht haben ^^

Also ich habe dir mal nen Beispiel gemacht mit den Types also so müste das gehen.

Code: [AUSKLAPPEN]


Graphics 800,600,16,2
SetBuffer BackBuffer()

;globals
Global menu_start_index = 1,menu_max_index = 7
Global menu_wahl = 1
Global menu_Anzahl = 8
Global menu_x = 450,menu_y=100
Global wahl = 1

;arrys
Dim a$(menu_anzahl)
 a$(1) = "Charakter"
 a$(2) = "Fähigkeit"
 a$(3) = "Ausrüsten"
 a$(4) = "Gegenstand"
 a$(5) = "Speichern"
 a$(6) = "Beenden"
 a$(7) = "info"

Type Menu
Field ID
End Type

For i=1 To 7
m.Menu=New Menu
m\id=i
Next


;/////////////////////////main\\\\\\\\\\\\\\\\\\\\\
Repeat
   Cls
;menu [0 = Spielen ; 1 = pause/menu]
;----------------------------------;
 If KeyHit(57) Then menu = menu +1 ;
 If menu = 2 Then menu = 0         ;
;----------------------------------;
            Rect 100,100,100,100,1
      If Menu=1
            menu_y = 0
             menu_show()
      End If

Flip
Until KeyHit(1)
;---------------------------------------------------



Function menu_show()
;Cls        ;würde das hier eingebaut werden, wäre es kein problem(jedoch verschwindet das "spiel")

   ;der rahmen
   Color 255,255,255:Rect menu_x-10,menu_y-10,150,(menu_max_index+1)*15,0

   For m.menu=Each menu
     If m\id=Wahl Then
      Color 90,120,150
      Rect menu_x,(Wahl-1)*15,100,12
     EndIf
   Next

  For I=1 To 7
   Color 255,255,255:Text menu_x,(i-1)*15,a$(i)
  Next 

If KeyHit(208) Then wahl = wahl +1               ;das makierkästchen steuern
If KeyHit(200) Then wahl = wahl -1

End Function


Wenn noch fragen hats dann frag habe das mal nicht weiter Kommentiert also viel spass damit

mfg

ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Dottakopf

BeitragMo, Apr 02, 2007 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
~EDIT ~ hoppla sry genau das meinte ich danke !!!!

Ähm ich möchte das Spiel Pausieren und gleichzeitig ein sich veränderndes Menü anzeigen. Und genau da ist das Paradox drinne ^^. Damit sich da was grafisch verändern kann muss ein cls rein, was dan aber wiederrum mein "eingefrorenes Hintergund " bild löscht.

zu "ich" :
Des mit den Types, hmm passiert da nicht genau das gleiche ?
~wenn ID feld gleich auswahl dan bemale diesen bereich~
So gehe ich nun in den nächsten bereich wird der alte bereich makiert gelassen, da dazwischen kein cls stattfindet Mad --> also sind dan 2 bereiche makiert.

zu Florian :
So was hatte ich es doch eigentlich schon !
Code: [AUSKLAPPEN]


Function menu_show()
;Cls    ;würde .... (da brauchste nur das ; weglöschen dan ist es das gleiche)


Da verschwindet wie bereits gesagt der Hintergrund... Ich möchte aber beides gleichzeitig haben. Menu und "pausiertes Spiel" Das problem ist nur, dass die makierungen nicht stimmen.

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

FWeinb

ehemals "ich"

BeitragMo, Apr 02, 2007 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Also nen Kleinen tip nochmal du must in Jedem Durchlauf der schleife Dein spiel malen sonst geht das nicht auser du wilst eben ne Pause funktion dann must du am besten ne Abfrage machen ob Pause ist und dann kanst du alles zeichenen lassen so wie es im momant ist ohne das sich z.B. die schwerkraft weiter befechnet wird also eingach so

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
Spieler=LoadImage("Spieler.bmp")
While Not Keyhit(1)
If keyhit(200) Then pause=pause+1
if Pause=2 Then Pause=0

If Pause=0 Then
posX=Posx+grav
Else
Text 400,300,"PAUSE",1,1
Endif

DrawImage spieler,posx,posy
Wend



mfg

ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Dottakopf

BeitragMo, Apr 02, 2007 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ! Jetzt hats klick gemacht. Ich habs jetzt so geschafft, dass ich nichts umcoden muss, da man einfach die reihenfolge der zeichenbefehle ändern musste ---> i

Code: [AUSKLAPPEN]


cls
 
1) Das was immer zu sehen sein soll !
2) Bei menu = 0 dann normales Spiel laufen lassen
3  Bei menu = 1  Nur das menu zeigen



jetzt klappts reibungslos, auch mit meinem alten code ^^
Trotzdem danke für deine Mühe !!

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group