Seite 1 von 3

Ist hier eine Schlaufe möglich?

Verfasst: 13.05.2007 16:59
von duli
Hallo habe mein kleines Ein mal Eins nun um eine simple Animation erweitert.

Nicht gleich verärgert sein wenn ich auf diese Weise Frage, aber so glaube ich das ich es besser verstehe.

Wenn eine Rechnung falsch eingegeben wurde und enter gedrückt wurde. So wird das ganze ja ausgewertet. Nun soll es aber einen Totenkopf geben der sich schüttelt wenn das Resultat falsch war. Das mache ich in dem ich fünf bildchen haben die den Kopfschütler erzeugen. Diese lade ich in das Programm nachher rufe ich sie mit delays auf um sie ablaufen zu lassen. Ja ich weiss das ist gar nicht die feine, aber es hilft mir zu verstehen.

Nun denke ich mir das das ganze auch mit einer Schlaufe gemacht werden kann, und das anstelle fünf Bilder auch eines genommen werden kann wo dann immer nur den bereich dargestellt wir welches die Animation verwendet. Könntet ihr mir helfen anhand des Codes den ich hier poste, mir auf die Sprünge zu helfen. :mrgreen:

Hier der Teil wo ich die Bilder in das Programm lade.

Code: Alles auswählen

;Hier werden die Bilder in das Programm mit eingebunden wenn es Compiliert wird
    DataSection
      Bild1:
      IncludeBinary "Piraten1a.bmp"
    EndDataSection

    DataSection
      Bild2:
      IncludeBinary "Piraten1b.bmp"
    EndDataSection

    DataSection
      Bild3:
      IncludeBinary "Piraten1b1.bmp"
    EndDataSection
    
    DataSection
      Bild4:
      IncludeBinary "Piraten1b2.bmp"
    EndDataSection
    
    DataSection
      Bild5:
      IncludeBinary "Piraten1b3.bmp"
    EndDataSection
    
    DataSection
      Bild6:
      IncludeBinary "Piraten1b4.bmp"
    EndDataSection
    
    DataSection
      Bild7:
      IncludeBinary "Piraten1b5.bmp"
    EndDataSection
Hier der Teil wo ich die Animation erzeuge.

Code: Alles auswählen

If result = Val(GetGadgetText(#EingabeErgebnis))        ;"Wenn" das eingegeben Resultat mit dem berechneten Resultat übereinstimmt
                           
   
   ProcedureReturn #True                               ;wird dem Prozedurresultat mit der Konstante #True "Wahr" zugewiesen.
    
    If CatchImage(#bild2, ?Bild2) ;Hier wird das Bild das in das Programm eingebunden, wobei das ?Bild2 der Wert ist wo das Bild gespeichert wird.
       ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#bild2));Hier wird das Bild mit dem ImageGadget dargestellt.
     EndIf 
   
   
  Else 
   
      
     If CatchImage(#bild2, ?Bild4) 
       ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#bild2))
     EndIf  
      
   Delay(200)
        If CatchImage(#bild2, ?Bild5) 
       ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#bild2))
     EndIf  
      
   Delay(200)
        If CatchImage(#bild2, ?Bild4) 
       ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#bild2))
     EndIf  
      
   Delay(200)
        If CatchImage(#bild2, ?Bild6) 
       ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#bild2))
     EndIf  
      
   Delay(200)
        If CatchImage(#bild2, ?Bild7) 
       ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#bild2))
     EndIf  
      
   Delay(200)
        If CatchImage(#bild2, ?Bild6) 
       ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#bild2))
     EndIf  
      
   Delay(200)
   
   
   
   
  EndIf       
Danke für eure Geduld

Verfasst: 13.05.2007 17:16
von ts-soft
Du kannst alle Bilder in eine Datasection packen:

Code: Alles auswählen

DataSection
  Bild1:
  IncludeBinary "Piraten1a.bmp"
  Bild2:
  IncludeBinary "Piraten1b.bmp"
  ; ... 
EndDataSection
Dann einmal alle Bilder Catchen, Ergebnis in einer Variablen/Konstanten
speichern, dann brauchste nur noch das Bild wechseln.

Verfasst: 13.05.2007 17:38
von duli
:allright: Danke vielmals.

Den ersten Teil habe ich verstanden, aber den Teil mit dem Catchen bin ich nicht mit gekommen, wie ist das Konkret? :oops:

Verfasst: 13.05.2007 17:50
von ts-soft

Code: Alles auswählen

Enumeration ; catched bmps
  #cBild1
  #cBild2
  #cBild3
  ; usw.
EndEnumeration

CatchImage(#cBild1, ?Bild1)
CatchImage(#cBild2, ?Bild2)
; usw.

If result = Val(GetGadgetText(#EingabeErgebnis))        ;"Wenn" das eingegeben Resultat mit dem berechneten Resultat übereinstimmt
                           
   
   ProcedureReturn #True                               ;wird dem Prozedurresultat mit der Konstante #True "Wahr" zugewiesen.
   
    ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild1));Hier wird das Bild mit dem ImageGadget dargestellt.
  
  Else
    ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild2))
    Delay(200)
    ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild3))
    Delay(200)
    ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild4))
    ; usw.

Verfasst: 13.05.2007 20:08
von duli
:mrgreen: Danke vielmals, jetzt ist mir der Groschen gefallen. Danke. :allright:

Verfasst: 13.05.2007 20:23
von ts-soft
duli hat geschrieben::mrgreen: Danke vielmals, jetzt ist mir der Groschen gefallen. Danke. :allright:
Dann solltest Du ihn schnell wieder aufheben, Du weißt ja:
Wer den Groschen nicht Ehrt, den Taler nicht Wert :mrgreen:

Verfasst: 14.05.2007 09:30
von Rings
ts-soft hat geschrieben:
duli hat geschrieben::mrgreen: Danke vielmals, jetzt ist mir der Groschen gefallen. Danke. :allright:
Dann solltest Du ihn schnell wieder aufheben, Du weißt ja:
Wer den Groschen nicht Ehrt, den Taler nicht Wert :mrgreen:
rofl, Dagobert aus Berlin spricht ;)

Verfasst: 14.05.2007 09:55
von ts-soft
Wenn mich schon jeder kennt, hier ein Bild von mir
Bild

Verfasst: 14.05.2007 10:15
von Rings
[total offtopic]
ich dachte du meinst den hier
[/total offtopic]

Verfasst: 14.05.2007 12:38
von Kaeru Gaman
@Topic

die von ts vorgeschlagene Variante ist aber eher unüblich.
eine konstantenfolge ermöglicht nunmal kein arbeiten mit einer Schleife.

beim einlesen kann man noch keine schleife verwenden, weil man ja die labels direkt angeben muss.
(es gibt eine methode auch hier ne schleife verwenden zu können, aber die ist etwas aufwendiger...)

Code: Alles auswählen

Dim AnimImages(5)

AnimImages(1) = CatchImage(#PB_Any, ?Bild1)
AnimImages(2) = CatchImage(#PB_Any, ?Bild2)
AnimImages(3) = CatchImage(#PB_Any, ?Bild3)
AnimImages(4) = CatchImage(#PB_Any, ?Bild4)
AnimImages(5) = CatchImage(#PB_Any, ?Bild5)
du erzeugst also ein array, in dem du die IDs der fünf Images speicherst.
die ID wird von CatchImage zurückgeliefert, wenn man es mit #PB_Any benutzt.

anzeigen kannst du das bild jetzt mit

Code: Alles auswählen

SetGadgetState(#Konstante_Bildfunktion2, AnimImages(Nr))
und Nr kann auch eine Schleifenvariable sein, du kannst jetzt also eine Schleife verwenden.

den Befehl ImageID() brauchst du in diesem fall nicht mehr,
weil die erzeugung mit #PB_Any die ID zurückliefert.
wenn du in dem array die Nummer gespeichert hättest, müßtest du ImageID() weiterhin benutzen.

übrigens:
auch vorher schon hättest du das Bild anzeigen können mit

Code: Alles auswählen

SetGadgetState(#Konstante_Bildfunktion2, ImageID(#cBild2))
es ist nicht nötig, jedesmal das Gadget neu zu erzeugen, es genügt, das bild zu wechseln!