Noob braucht Hilfe

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Gast

Betreff: Noob braucht Hilfe

BeitragMi, Mai 19, 2004 18:24
Antworten mit Zitat
Hi, also das ist mein erster Beitrag. Ich bin noch ein totaler Blitz Newbie und hab volgendes Problem:
Wenn man das Programm startet erscheint das Image "start".
Wenn man jetzt darauf klickt, sollte die Schleife beendet werden.
Aber es gibt keine Reaktion.

Könnte mir bitte jemand helfen und sagen wo der Fehler ist?

Hier ist der Code:
Code: [AUSKLAPPEN]

Graphics 1024, 768, 16, 3

SetBuffer BackBuffer()

Global befehl = 1                        ;Wenn befehl = 0, dann Ende der Hauptschleife
Global menue = 1                        ;Zum oeffnen des Menues beim Start
Global mouse = LoadImage("mouse.bmp")         ;Laedt Image fuer den Mauszeiger


Function menu()                           ;Menue
   befehl2 = 1
      Repeat
         ClsColor 0, 0, 0
         Cls
         
         ;Laedt Menueteile
         ;allgemein
         optionEnd = LoadImage("ende.bmp")
         DrawImage optionEnd, 40, 700

         ;Erste Anwendung
         start = LoadImage("optionen1.bmp")
         If menue = 1 Then
            DrawImage start, 50, 100
         EndIf
         
         ;Wiederholte Anwendung
         zu = LoadImage("optionen2.bmp")
         If menue = 0 Then
            DrawImage zu, 50, 500
         EndIf
         
         ;Zeichnet Mauszeiger
         DrawImage mouse, MouseX(), MouseY()
      
         ;Kontrolliert Menueauswahl
         ;allgemein
         If ImagesOverlap(optionEnd, 40, 700, mouse, MouseX(), MouseY()) And MouseHit(1) Then
            befehl = 0
         EndIf
         
         ;Erste Anwendung
         If menue = 1 Then
            If ImagesOverlap(start, 50, 100, mouse, MouseX(), MouseY()) And MouseHit(1) Then
               befehl2 = 0
            EndIf
         EndIf
         
         Flip
         
      Until KeyHit(1) Or befehl = 0 Or befehl2 = 0

   FlushKeys
   FlushMouse
End Function



Repeat
   
   ;Oeffnet Menue
   If KeyHit(1) Or menue = 1 Then
      menu()
   EndIf
   
   ;Gibt an, ob dass Menue offen war
   menue = 0

   Cls
   
   DrawImage mouse, MouseX(), MouseY()            ;Zeichnet Mauszeiger


   Flip
Until befehl = 0

FlushKeys
FlushMouse

End

Kryan

BeitragMi, Mai 19, 2004 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
jede variable ist am anfang 0 (sprich:NULL)
damit bleibt die variable befehl2 0 und wird auch bis zum schleifenende nicht geändert
somit ist es auch bei der abfrage 0 und somit wird die schleife beendet
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Markus2

BeitragMi, Mai 19, 2004 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
@Shark

Versuche das mal so umzuändern das das Menü nicht in einer
Funktion stecken bleibt in Repeat Until .
Was ich meine ist eine Hauptschleife reicht und dort
das Menü aufrufen/anzeigen/abfragen wenn es offen ist .

Kryan

BeitragMi, Mai 19, 2004 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
meins war falsch, schuldige!

Hab aber den Fehler gefunden

Wie kann man so noobig sein und in die Hauptschleife LoadImage setzen Laughing ????????????????????

[edit] wieso zeichnest du zweimal den mauszeiger??
[edit2] HAbs optimiert:
Code: [AUSKLAPPEN]
Graphics 1024, 768, 16, 3

SetBuffer BackBuffer()

Global befehl = 1                        ;Wenn befehl = 0, dann Ende der Hauptschleife
Global menue = 1                        ;Zum oeffnen des Menues beim Start
Global mouse = LoadImage("mouse.bmp")         ;Laedt Image fuer den Mauszeiger


Function menu()                           ;Menue
   befehl2 = 1
   optionEnd = LoadImage("ende.bmp")
   start = LoadImage("optionen1.bmp")
   zu = LoadImage("optionen2.bmp")
   ClsColor 0, 0, 0
   Repeat
         Cls

         ;Laedt Menueteile
         ;allgemein
         DrawImage optionEnd, 40, 700

         ;Erste Anwendung
         If menue = 1 Then
            DrawImage start, 50, 100
         EndIf

         ;Wiederholte Anwendung
         If menue = 0 Then
            DrawImage zu, 50, 500
         EndIf

         ;Zeichnet Mauszeiger
         DrawImage mouse, MouseX(), MouseY()

         ;Kontrolliert Menueauswahl
         ;allgemein
         If ImagesOverlap(optionEnd, 40, 700, mouse, MouseX(), MouseY()) And MouseHit(1) Then
            befehl = 0
         EndIf

         ;Erste Anwendung
         If menue = 1 Then
            If ImagesOverlap(start, 50, 100, mouse, MouseX(), MouseY()) And MouseHit(1) Then
               befehl2 = 0
            EndIf
         EndIf

         Flip

      Until KeyHit(1) Or befehl = 0 Or befehl2 = 0

   FlushKeys
   FlushMouse
End Function



Repeat

   ;Oeffnet Menue
   If KeyHit(1) Or menue = 1 Then
      menu()
   EndIf

   ;Gibt an, ob dass Menue offen war
   ;menue = 0;<-------------Das WEGGGGGGGGGGGGGGGGGGGG!!!!!!!!!!!!!!!!!!

   Cls

   DrawImage mouse, MouseX(), MouseY()            ;Zeichnet Mauszeiger


   Flip
Until befehl = 0

FlushKeys
FlushMouse

End
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
  • Zuletzt bearbeitet von Kryan am Mi, Mai 19, 2004 19:36, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragMi, Mai 19, 2004 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
kryan, lach nit zu laut.
Jeder hat mal angefangen - auch du. Und deine Codes sind mit Verlaub auch nit immer sehr Pro...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Kryan

BeitragMi, Mai 19, 2004 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Na, so meinte ich es ja nicht
Nicht sooooooooooooo fies Smile
@Shark Hoffenlich klappt es jetzt
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Gast

BeitragMi, Mai 19, 2004 20:21
Antworten mit Zitat
sry, aber wenn ich deinen Code verwende und auf Start drücke, dann passiert immer noch nix. Sad

Ich kapier das nicht, da vom logischen Ablauf alles stimmen müsste, glaub ich zumindest Smile Ich bins schon zig mal durchgegangen.
 

Edlothiol

BeitragMi, Mai 19, 2004 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denk mal dass es dadran liegt, dass du die Funktion immer wieder aufrufst Rolling Eyes
Die Funktion selbst stimmt zwar, aber sie wird sofort neu aufgerufen wenn du sie einmal beendet hast, ohne dass du etwas davon merkst.

Gossi

BeitragDo, Mai 20, 2004 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Das glaube ich nicht. Das wäre doch nur der Fall, wenn das Menü ohne Bedingung aufgerufen wird. Es gibt aber eine Bedingung:

Code: [AUSKLAPPEN]

If KeyHit(1) Or menue = 1 Then
      menu()
   EndIf


Außerdem in der Funktion:
Code: [AUSKLAPPEN]

FlushKeys
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.
 

Edlothiol

BeitragDo, Mai 20, 2004 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur ist die Bedingung immer wahr Rolling Eyes Denn zumindest im Code von Kryan wird menue nie wieder auf 0 gesetzt, wenn ich das richtig sehe.
 

tipfehler

BeitragSa, Mai 22, 2004 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Du überprüfst die Kollision mit folgendem Code:

Code: [AUSKLAPPEN]


;Kontrolliert Menueauswahl allgemein
If ImagesOverlap(optionEnd, 40, 700, mouse, MouseX(), MouseY()) And MouseHit(1) Then
            befehl = 0
EndIf
         
;Erste Anwendung
If menue = 1 Then
If ImagesOverlap(start, 50, 100, mouse, MouseX(), MouseY()) And MouseHit(1) Then
            befehl2 = 0
            EndIf
EndIf


Doch MouseHit(1) überprüft, ob die Maus seit dem letzten Aufruf dieses Befehls gedrückt wurde. Und da die erste Überprüfung immer abläuft, musst du immer zwischen diesen zwei Befehlen die Maus drücken, und das ist fast unmöglich.

versuch's mal so:
Code: [AUSKLAPPEN]

If Mousehit(1) Then
         If ImagesOverlap(optionEnd, 40, 700, mouse, MouseX(), MouseY()) Then
            befehl = 0
         EndIf

         If menue = 1 Then
            If ImagesOverlap(start, 50, 100, mouse, MouseX(), MouseY()) Then
               befehl2 = 0
          EndIf
         EndIf
EndIf

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group