Problem bei vergrössern eines Vierecks

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Ticha

Betreff: Problem bei vergrössern eines Vierecks

BeitragDo, Feb 01, 2007 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute

nach langem hin und her hab ich mich jetzt doch durchgerungen mir BlitzMax zu kaufen um mein Projekt in BM umzusetzen. Dafür würde ich aber gerne ein eigen geschreibens GUI integrieren. Das Projekt hat ähnlichkeit mit "Uplink" falss das jmd kennt, jedoch in einem ganz anderen Kontext.
Es wäre ja langweilig das Menüs einfach plötzlch auftauchen oder einfach so erscheinen, deshalb habe ich daran gedacht Menüs einfach aufklappen zu lassen. Um dies zu üben versuche ich erstmal ein Viereck sich aufklappen zu lassen. Im Grunde denkt man es sei so einfach dass man einfach die Höhe und die Breite mit einer Variable vertauscht und die dann inkrementiert. Wenn ich das in einfach in die Main-Schleife hineinschreibe, funktioniert das auch ohne probleme.
Aber dieses Quadrat soll sich ja auf Knopfdruck vergrössern. Somit habe ich Q als ausgangs Input zur aktivierung dessen genommen und eine IF abfrage davor gesetzt, daraufhin wird dann eine For schleife aktiviert die dann wiederum die variabeln inkrementiert.

Naja nur funktioniert das ganze nicht so wie ich es will.

1. Der Zähler läuft erst druch ohn auch nur das Quadrat zu zeiogen, stellt es aber nachdem er durchgelaufen ist kruz dar. Man sieht aber keienn grafischen effekt

2. Das Quadrat verschwindet direkt wieder, logisch da sobald das For durchgelaufen ist und das Quadrat angeteigt wurde, dieses auch sofort wieder verschwindert da ein CLS initialisiert wurde. Aber wie kann ich das ändern? Was muss ich tun das das Quadrat auch danach wieder stehen bleibt?


Hier der Code

Code: [AUSKLAPPEN]

Global i# , a# , b#
Global laenge#, breite#
laenge = 0
breite = 0
While Not KeyHit( KEY_ESCAPE )
   Cls
   'DrawImage(Bild:TImage[i],0,0)
   'If KeyHit (KEY_I)
      i = 0
   'EndIf
   
   'If KeyHit (KEY_O)
      i = 1
   'EndIf
   'If KeyHit (KEY_P)
      i = 2
   'EndIf
   'DrawRect( 350, 200 , laenge , breite )
   If KeyHit (KEY_Q)
      While breite < 300
        'Cls
        laenge = laenge + 1
        breite = breite + 1
       DrawRect( 350, 200 , laenge , breite )
      Wend
   EndIf
   DrawRect (350, 200, laenge, breite)
Flip
Wend
   


Die ausgeklammerten Programierzeilen sollen die vorigen versuche darstellen mit denen ich es schon versucht habe :-I

FOODy

BeitragDo, Feb 01, 2007 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Rechteck wird in einem While gezeichnet, was bedeutet das er nicht ausgegeben wird, außer das Endresultat da nach dem While in der Hauptschleife erst ein Flip kommt.

Am besten wäre es wenn du eine Status variable hast, die sagt ob es jetzt Erscheinen oder nicht erscheinen soll. (hier "fade")

Wenn der Status auf Erscheinen ist soll pro Schleifendurchgang das Rechteck vergrößert werden.


Code: [AUSKLAPPEN]
Framework BRL.GLMax2D
Graphics 800,600
Global i# , a# , b#
Global laenge#, breite#
Global fade:Byte
laenge = 0
breite = 0

While Not KeyHit( KEY_ESCAPE )
   Cls
   If KeyHit(KEY_Q) fade=True
   If fade
      If breite < 300
        laenge = laenge + 1
        breite = breite + 1
       DrawRect( 350, 200 , laenge , breite )
      Else
       DrawRect (350, 200, laenge, breite)
      EndIf
   EndIf
Flip
Wend




Gruß,
FOODy
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB
 

Ticha

BeitragDo, Feb 01, 2007 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey cool danke. Ich werde mich wohl erst ein bisschen an BM gewöhnen müssen. Hab auch schon mit einer funktion versucht aber ohne viel erfolg. Danke für dein beispeil es hat mir sehr weitergeholfen Smile

EDIT:

Ich hab einen Fehler in deinem Code gefunden. Das Quadrat imkrementtiert zwar nur gibt es dabei ein kleines Problem. Es hört nicht mehr auf. Ich habe schon versucht das fade im ELSE teil auf FALSE zu stellen... nur da tut sich gar nix :-I gibt es in BM nich sowas wie Break? was muss ich tun um das inkremntieren zu stoppen?

EDIT2:

sry war fehler von mir. Hab falsch herum inkrementiert :-I

Nur is wieder das Problem aufgetreten wie vorher das das Viereck einfach verschwindet. Wie kann ich das Beheben?

EDIT3: hat sich auch erledigt... hatte ein fehler eingebaut-. Dein Code fuktioniert zu 100%

danke nochma Smile
 

Ticha

BeitragDo, Feb 01, 2007 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt habe ich versucht das mit der Maus zu kombinieren. Dazu hab ich extra 2 Variaben für die X,Y Koordinaten der Maus zusammengestellt. MausX und MAusY.

Als nächstes wollte ich, dass wenn die Maus über einen bestimmten Breich geht, das Viereck sich vergrössert und wenn die Maus nicht mehr drüber ist verkleinert es sich wieder.

Aber irgendwie funktioniert das nicht ganz. Ich habe die Wert der Y achse auf ein niedriges Niveu gehalten aber irgednwie scheint er mir in dieser Fläche die Y achse nicht auf die Fläche zu begrenzen die ich eigentlich benutzen bzw als Aktionsfläche benutzen will.

hier der Code dazu:

Code: [AUSKLAPPEN]

mausx = MouseX()
   mausy = MouseY()
   'if KeyHit(KEY_Q) fade = True
   'if KeyHit(Key_W) fade = False
   If mausx >= 100 Or mausx <= 200 And mausy >= 500 Or mausy <= 450
      fade=False
   Else
      fade=True
   EndIf


wo liegt mein Fehler?

FOODy

BeitragDo, Feb 01, 2007 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist nichts weiter als eine kleine Abfrage nach der Breite. Smile

Ich hab den Code ein bisschen übersichtlicher gemacht (für mich).

Code: [AUSKLAPPEN]
Framework BRL.GLMax2D

Graphics 800,600

Global i# , a# , b#
Global laenge#, breite#
Global fade:Byte

laenge = 0
breite = 0

While Not KeyHit( KEY_ESCAPE )
   Cls
      
      If MouseX()>100 And MouseX()<200 And MouseY()>100 And MouseY()<200
         fade = True
      Else
         fade = False
      EndIf
      
      SetColor 255,0,0
      DrawRect 100,100,100,100
      SetColor 255,255,255
      
      If fade
         If laenge<300 laenge:+1
         If breite<300 breite:+1
      Else
         If laenge>0 laenge:-1
         If breite>0 breite:-1
      EndIf
      
      DrawRect (350, 200, laenge, breite)
   Flip
Wend


Ich denke der Code erklärt alles.



Gruß,
FOODy
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB
 

Ticha

BeitragDo, Feb 01, 2007 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey cool danke Smile

ich dachte ich muss das mit OR unterscheiden...aber jetzt macht das auch Sinn Very Happy

danke für deine Hilfe Smile Hat mich ein gutes Stück weiter gebracht Smile

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group