Wechsel des Hintergrunds durch Button oder ähnliches

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

mmsm1985

Betreff: Wechsel des Hintergrunds durch Button oder ähnliches

BeitragDo, Jun 08, 2006 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man einen oder mehrere Bereiche "anklickbar" machen, sodass das Programm ein anderen Hintergrund öffnet, wenn man diesen Bereich anklickt???

Danke im voraus

Vincent

BeitragDo, Jun 08, 2006 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja.
Wenn ein Mausbutton gedrückt wurde (z.B. Mousehit( 1 ) ) testest du, ob die Mauskoordinaten über dem Button sind ( MouseX() , Mousey() ).
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt !
 

Lastsamurai

BeitragDo, Jun 08, 2006 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach Abfragen ob die Maus auf dem gewünschten Bild/Bereich ist und eine Maustaste gedrückt wurde und dann das alte Bild löschen und den neuen Hintergrund malen...
Guck dir die Befehle MouseX(), MouseY(), Moushit(), Mousedown an.
 

mmsm1985

BeitragDo, Jun 08, 2006 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, nur wie fragt man solche Sachen ab.
'Tschuldigung, nur ich bin blutiger Anfänger.

Hubsi

BeitragDo, Jun 08, 2006 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Lastsamurai hat Folgendes geschrieben:
Guck dir die Befehle MouseX(), MouseY(), Moushit(), Mousedown an.

Damit. Auf www.blitzbase.de die Onlinehilfe runterladen und forschen bis die Tasten brechen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

PowerProgrammer

BeitragFr, Jun 09, 2006 7:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist mal ein Beispiel:

Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

SeedRnd MilliSecs()

; Startfarben
Area_R = 0
Area_G = 0
Area_B = 255

Repeat
   ;Rahmen
   Color 128,128,128
   Rect 199,199,402,202
   ; Bereich einzeichnen
   Color Area_R, Area_G, Area_B
   Rect 200,200,400,200
   Flip
   ;Abfrage
   mHit = MouseHit(1)
   mX = MouseX()
   mY = MouseY()
   If mHit = 1 And mX >= 200 And mX <= 600 And mY >= 200 And mY <= 400 Then
      Area_R = Rand(255)
      Area_G = Rand(255)
      Area_B = Rand(255)   
   EndIf
Until KeyHit(1)
End
 

mmsm1985

Betreff: neues problem

BeitragFr, Jun 09, 2006 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe jetzt ein neues Problem.
Mein Hintergrund wechselt zwar. Geht aber wieder sofort zurück zum Ursprünglichen Hintergrund. Dies soll aber nicht passieren.Es soll im neuen Menu bleiben.

quellcode
Code: [AUSKLAPPEN]

Global gfxhauptmenu = LoadImage("gfx\hauptmenu.jpg");Hauptmenu Grafik laden
Global gfxcursor = LoadImage("gfx\cursor.jpg") ;Cursor laden(ordentlichen besorgen)
Global gfxhilfe = LoadImage("gfx\hilfe.jpg") ;Hilfe laden(Bilddatei schreiben)
Repeat
Flip

TileBlock gfxhauptmenu  ; Hintergrundgrafik zeichnen

mx = MouseX()
my = MouseY()
mhit = MouseHit(1)

DrawImage gfxcursor, mx , my ;Mauszeiger zeichnen



If mhit = 1 And mX >= 200 And mX <= 600 And mY >= 200 And mY <= 400 Then
TileBlock gfxhilfe
End If

If KeyHit(1) Then Exit
 
Forever


Hagbard

BeitragFr, Jun 09, 2006 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist so, dass du da eine Variable hast, mhit, die True ist, wenn du mit der maus klickst, aber auch nur dann, denn das hast du so festgelegt...

Eine Möglichkeit ist, dass du, wenn du mit der Maus klickst, eine andere Variable ("hilfe_anzeigen") auf True setzt...diese bleibt dann auch auf True, solange bis vielleicht ein anderer Button angeklickt wurde.

Später fragst du ab, was passieren soll, wenn diese Variable True ist.
ZB die Grafik zeichnen...


Code: [AUSKLAPPEN]

Global gfxhauptmenu = LoadImage("gfx\hauptmenu.jpg");Hauptmenu Grafik laden
Global gfxcursor = LoadImage("gfx\cursor.jpg") ;Cursor laden(ordentlichen besorgen)
Global gfxhilfe = LoadImage("gfx\hilfe.jpg") ;Hilfe laden(Bilddatei schreiben)


Repeat
Flip

TileBlock gfxhauptmenu  ; Hintergrundgrafik zeichnen

mx = MouseX()
my = MouseY()
mhit = MouseHit(1)

DrawImage gfxcursor, mx , my ;Mauszeiger zeichnen



If mhit = 1 And mX >= 200 And mX <= 600 And mY >= 200 And mY <= 400 Then
hilfe_anzeigen = 1
End If

If hilfe_anzeigen = 1 Then
  DrawImage gfxhilfe, X, Y
EndIF

If KeyHit(1) Then Exit
 
Forever
  • Zuletzt bearbeitet von Hagbard am Fr, Jun 09, 2006 17:44, insgesamt einmal bearbeitet
 

mmsm1985

BeitragFr, Jun 09, 2006 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke
 

mmsm1985

BeitragFr, Jun 09, 2006 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider muss ich schon wieder nerven Embarassed
Ich hocke jetzt schon wieder total lange an ein Problem was ich nicht selbst gelöst krieg.Und zwar versteh ich jetzt wie man zwischen zwei Bilder hin un her spring(durch einen Button).
Ich komm jetzt vom Hauptmenu in das Hilfemenu und zurück. Das ganze geht aber nur einmal. Es soll aber beliebig oft möglich sein hin und her zu schalten.

Code: [AUSKLAPPEN]

If mhit = 1 And mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then
hilfe_anzeigen = 1
End If

If hilfe_anzeigen = 1 Then
  TileBlock gfxhilfe
  DrawImage gfxcursor, mx , my
EndIf

If hilfe_anzeigen = 1 And mhit = 1 And mX >= 292 And mX <= 448 And mY >= 542 And mY <= 595 Then
hilfebeenden = 1
EndIf

If hilfebeenden = 1 Then
TileBlock gfxhauptmenu
DrawImage gfxcursor, mx, my
EndIf

ChaosCoder

BeitragFr, Jun 09, 2006 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier erstmal, so wie ich das jetzt vertanden hab Rolling Eyes

Code: [AUSKLAPPEN]

If mhit = 1 And mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then
hilfe_anzeigen = 1
End If

If hilfe_anzeigen = 1 Then
  TileBlock gfxhilfe
  DrawImage gfxcursor, mx , my
else
  TileBlock gfxhauptmenu
  DrawImage gfxcursor, mx, my
EndIf

If hilfe_anzeigen = 1 And mhit = 1 And mX >= 292 And mX <= 448 And mY >= 542 And mY <= 595 Then
hilfeanzeigen=0
EndIf


Ich würd dir aber vorschlagen, weil du ja warscheinlich nich nur ein anderes menü machen wirst wie hilfe, z.B. unteranderem optionen, was weiß ich, würde ich dir folgendes vorschlagen:

Code: [AUSKLAPPEN]

If mhit = 1
if mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then menu=1
if mX >= 292 And mX <= 448 And mY >= 542 And mY <= 595 then menu=0
End If

if menu=0
  TileBlock gfxhauptmenu
  DrawImage gfxcursor, mx, my
elseIf menu =1
  TileBlock gfxhilfe
  DrawImage gfxcursor, mx , my
;elseif menu=2 then
; bla bla
EndIf


MfG ChAoSDrAgOn

PS: Pseudocode, ich sag nich, dass es funktioniert(nich getestet) Wink
Projekte: Geolaria | aNemy
Webseite: chaosspace.de
 

mmsm1985

BeitragSa, Jun 10, 2006 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Danke. Es funktionukelt. Deine letzte Variante ist echt vorteilhafter.
 

icestorm

BeitragSa, Jun 10, 2006 7:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Da du den gfxcursor in jeder Bedingung deiner If-Anweisung zeichnest, kannst du ihn auch gleich außerhalb zeichnen lassen, das erspart ein paar Zeilen Code Wink

Code: [AUSKLAPPEN]
If mhit = 1
if mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then menu=1
if mX >= 292 And mX <= 448 And mY >= 542 And mY <= 595 then menu=0
End If

if menu=0
  TileBlock gfxhauptmenu
elseIf menu =1
  TileBlock gfxhilfe
;elseif menu=2 then
; bla bla
EndIf
DrawImage gfxcursor, mX, mY


Sollte dann genauso funktionieren und übersichtlicher sein!
 

mmsm1985

BeitragSa, Jun 10, 2006 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh Danke.
 

mmsm1985

BeitragSa, Jun 10, 2006 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich komm mir zwar schon blöd vor, aber ich brauche eure Hilfe.
Hab ja aber schon einiges gelernt.
Hier mein neues Problem:
Ich habe jetzt alle meine Buttons, leider bestehen diese Buttons in allen Fenster(hauptmenu,otionen,hilfe und so weiter).So kann ich in der hilfe aufeinmal in die Optionen, obwohl dieser Button nicht exestieren soll.
Ich weiß das ich in der if-then Konstruktion noch was hinzufügen muss.ich weiß nur nicht wie. Hoffe ich habe es verständlich erklärt.

Code: [AUSKLAPPEN]

If mhit = 1
If mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then menu= 1;(Hilfe)Buttonbegrenzung und
If mX >= 281 And mX <= 448 And mY >= 542 And mY <= 595 Then menu= 0;(Hauptmenu)Menuzuordnung
If mx >= 200 And mx <= 599 And my >= 475 And my <= 521 Then menu= 2;(Spiel Verlassen)
If mx >= 200 And mx <= 598 And my >= 200 And my <= 248 Then menu= 3;(Spiel Starten)
If mx >= 200 And mx <= 598 And my >= 270 And my <= 319 Then menu= 4;(Spiel Laden)
If mx >= 200 And mx <= 598 And my >= 345 And my <= 394 Then menu= 5;(Optionen)
End If 

If menu=0 Then;Wenn der und der Button gedrückt wird, dann passiert das und das.
  TileBlock gfxhauptmenu
   
ElseIf menu = 1 Then
  TileBlock gfxhilfe
 
ElseIf menu = 2 Then
  Exit
EndIf
DrawImage gfxcursor, mX, mY
 

icestorm

BeitragSa, Jun 10, 2006 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe jetzt nicht ganz, was du meinst, ist der Optionen Button noch da, im Hilfe-Menu?

Ist das der ganze Code für Menu 1?

Ich glaube aber, ich weiß das Problem, der ganze Code for dem ElseIf für Menu 1 ist selber in keiner Abfrage, das heißt bei jedem Schleifendurchlauf wird auch geprüft, ob irgendwo hingeklickt wird.

Gib diesen Code:

Code: [AUSKLAPPEN]
If mhit = 1
If mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then menu= 1;(Hilfe)Buttonbegrenzung und
If mX >= 281 And mX <= 448 And mY >= 542 And mY <= 595 Then menu= 0;(Hauptmenu)Menuzuordnung
If mx >= 200 And mx <= 599 And my >= 475 And my <= 521 Then menu= 2;(Spiel Verlassen)
If mx >= 200 And mx <= 598 And my >= 200 And my <= 248 Then menu= 3;(Spiel Starten)
If mx >= 200 And mx <= 598 And my >= 270 And my <= 319 Then menu= 4;(Spiel Laden)
If mx >= 200 And mx <= 598 And my >= 345 And my <= 394 Then menu= 5;(Optionen)
End If


Einfach zu dem If menu=0 ... dazu!

Also dann ca so:

Code: [AUSKLAPPEN]

If menu=0 Then;Wenn der und der Button gedrückt wird, dann passiert das und das.
  TileBlock gfxhauptmenu
  If mhit = 1
  If mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then menu= 1;(Hilfe)Buttonbegrenzung und
  If mX >= 281 And mX <= 448 And mY >= 542 And mY <= 595 Then menu= 0;(Hauptmenu)Menuzuordnung
  If mx >= 200 And mx <= 599 And my >= 475 And my <= 521 Then menu= 2;(Spiel Verlassen)
  If mx >= 200 And mx <= 598 And my >= 200 And my <= 248 Then menu= 3;(Spiel Starten)
  If mx >= 200 And mx <= 598 And my >= 270 And my <= 319 Then menu= 4;(Spiel Laden)
  If mx >= 200 And mx <= 598 And my >= 345 And my <= 394 Then menu= 5;(Optionen)
End If 
   
ElseIf menu = 1 Then
  TileBlock gfxhilfe
 
ElseIf menu = 2 Then
  Exit
EndIf
DrawImage gfxcursor, mX, mY


So sollte es dann den gewünschten Effekt erzielen, wenn ich das Problem richtig erkannt habe.

*EDIT* und natürlich, wenn die Buttons vorher schon gezeichnet werden, dann das auch zum menu=0 hinzufügen.
 

mmsm1985

BeitragSa, Jun 10, 2006 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Vorab Danke.

1.Im hilfe menu soll selber kein Option Button exestieren. Für das Programm tut er das aber.In der Hilfe soll nur "zurück zum Hauptmenu" exestieren.

2. Ja, ich will auch erteinmal nur zwischen den Menus hin und her schalten können.

Es löst mein Problem bedingt, aber den Rest bekomme ich schon alleine hin.
Falls nicht weiß ich ja wo ich fragen kann.
 

icestorm

BeitragSa, Jun 10, 2006 23:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich nehme doch an, die Buttons sind Grafiken und werden vor den ganzen if-Abfragen gezeichnet, das gehört (wie schon geschrieben) dann auch in die If.

Du könntest ja mal mehr als nur dieses Code-Stückchen posten!

Außerdem würde ich dir empfehlen das Menu in Funktionen aufzuteilen, ist um einiges übersichtlicher!
 

mmsm1985

BeitragSa, Jun 10, 2006 23:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja die Buttons sind Bilddateien. Anders bekomm ich das nocht nicht hin. Embarassed

Das mit den Function hab ich noch nicht ganz raus. Crying or Very sad

Hier der komplette
Code: [AUSKLAPPEN]


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



Global gfxhauptmenu = LoadImage("gfx\hauptmenu.png");Hauptmenu Grafik laden
Global gfxcursor = LoadImage("gfx\cursor.jpg") ;Cursor laden(ordentlichen besorgen)
Global gfxhilfe = LoadImage("gfx\hilfe.jpg") ;Hilfe laden(Bilddatei schreiben)


Repeat ;Hauptschleife
Flip

TileBlock gfxhauptmenu  ; Hintergrundgrafik zeichnen

mx = MouseX()
my = MouseY()
mhit = MouseHit(1)
mdown= MouseDown(2)

DrawImage gfxcursor, mx , my ;Mauszeiger zeichnen



If mhit = 1
If mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then menu= 1
If mx >= 281 And mx <= 448 And my >= 542 And my <= 595 Then menu=6
EndIf

If menu = 0 Then;Wenn der und der Button gedrückt wird, dann passiert das und das.
  TileBlock gfxhauptmenu
If mhit = 1
If mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then menu= 1;(Hilfe)Buttonbegrenzung und
If mX >= 281 And mX <= 448 And mY >= 542 And mY <= 595 Then menu= 0;(Hauptmenu)Menuzuordnung
If mx >= 200 And mx <= 599 And my >= 475 And my <= 521 Then menu= 2;(Spiel Verlassen)
If mx >= 200 And mx <= 598 And my >= 200 And my <= 248 Then menu= 3;(Spiel Starten)
If mx >= 200 And mx <= 598 And my >= 270 And my <= 319 Then menu= 4;(Spiel Laden)
If mx >= 200 And mx <= 598 And my >= 345 And my <= 394 Then menu= 5;(Optionen)
End If
   
ElseIf menu = 1 Then
  TileBlock gfxhilfe
 
ElseIf menu = 2 Then
  Exit
EndIf
DrawImage gfxcursor, mX, mY


EndIf
 
 

icestorm

BeitragSo, Jun 11, 2006 0:02
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich habe den Fehler gefunden:

Code: [AUSKLAPPEN]


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


;Eventuell Timer einbauen
Global gfxhauptmenu = LoadImage("gfx\hauptmenu.png");Hauptmenu Grafik laden
Global gfxcursor = LoadImage("gfx\cursor.jpg") ;Cursor laden(ordentlichen besorgen)
Global gfxhilfe = LoadImage("gfx\hilfe.jpg") ;Hilfe laden(Bilddatei schreiben)


Repeat ;Hauptschleife
Flip

mx = MouseX()
my = MouseY()
mhit = MouseHit(1)
mdown= MouseDown(2)

DrawImage gfxcursor, mx , my ;Mauszeiger zeichnen



If mhit = 1
If mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then menu= 1
If mx >= 200 And mx <= 599 And my >= 475 And my <= 521 Then menu= 2;(Spiel Verlassen)
EndIf

If menu = 0 Then;Wenn der und der Button gedrückt wird, dann passiert das und das.
  TileBlock gfxhauptmenu
If mhit = 1
If mX >= 200 And mX <= 599 And mY >= 412 And mY <= 458 Then menu= 1;(Hilfe)Buttonbegrenzung und
If mX >= 281 And mX <= 448 And mY >= 542 And mY <= 595 Then menu= 0;(Hauptmenu)Menuzuordnung
If mx >= 200 And mx <= 599 And my >= 475 And my <= 521 Then menu= 2;(Spiel Verlassen)
If mx >= 200 And mx <= 598 And my >= 200 And my <= 248 Then menu= 3;(Spiel Starten)
If mx >= 200 And mx <= 598 And my >= 270 And my <= 319 Then menu= 4;(Spiel Laden)
If mx >= 200 And mx <= 598 And my >= 345 And my <= 394 Then menu= 5;(Optionen)
End If
   
ElseIf menu = 1 Then
  TileBlock gfxhilfe
 
ElseIf menu = 2 Then
  Exit
EndIf


EndIf
 


Du hattest nach dem Flip das gfxhauptmenu gezeichnet, also wird das bei jedem Schleifendurchlauf gezeichnet.

Und du hast den Mauszeiger 2mal gezeichnet, funktioniert zwar trotzdem, aber es verbraucht mehr ressourcen!

Oben sollte jetzt die fehlerfreie Version sein!

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group