Animierte Bilder mit Festgelegter Anzahl

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Die Kiste

Betreff: Animierte Bilder mit Festgelegter Anzahl

BeitragMo, Apr 05, 2010 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wollt eigentlich mal eben schnell einen Netten Grafik effekt machen.(Den ich auch geschaft hab)
Ich hab alles in eine funktion gepackt.(Und es Funktionirerte so auch).Aber als ich dann die Funktion Zweimal ausführte,gings auffeinmal nicht mehr.Klingt blöd ich weiß.
Code: [AUSKLAPPEN]

Graphics 800,600,32,2
SetBuffer BackBuffer ()
Global Button=LoadAnimImage ("Button.png",100,50,0,10)
Global timer=CreateTimer(15)
Global frame = 1
Repeat
   WaitTimer timer

      Frames(0,60)
      Frames(0,120)

   Flip
Cls

Until KeyHit (1)
End
Function Frames (BX,BY)

X=MouseX()
Y=MouseY()

If BX = 800
   BX =0
EndIf

If ImageRectCollide(Button,BX,BY,frame,X,Y,10,10)
   Frame = Frame+1
      If Frame = 6
         Frame = 5
      EndIf
Else
   Frame = frame -1
      If frame =0
    frame =1
   EndIf
EndIf

DrawImage Button,bx,by,frame
End Function

Ich hoffe ihr könnt mir helfen und danke schonmal im vorraus Wink (Wahrscheinlich ist es eh schonwieder irgend ein dümmlicher fehler, ach und falls es das thema schon gab... ich fand keine treffer)
Mfg Die Kiste
 

n-Halbleiter

BeitragMo, Apr 05, 2010 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Es funktioniert deshalb nicht mit zwei Buttons, da du die Variable "frames" für beide Buttons verwendest. Ist das nicht der Fehler, dann hättest du ihn wohl besser beschreiben müssen. Wink
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

Eingeproggt

BeitragMo, Apr 05, 2010 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja... Ich finde da erstmal keinen Fehler aber dir muss klar sein dass die Funktion, wird sie mehrmals aufgerufen, immer auf dieselbe globale Variable "frame" zugreift - und somit der eine Button den Frame des / der anderen überschreibt.

Kleine allgemeine Tipps:
Code etwas sauberer einrücken - du hast immerhin schon angefangen aber ein bisschen mehr Konsequenz würde nicht schaden Wink
Ein Timer in Verbindung mit Flip ist leider sinnlos - verwende Flip 0 bitte.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

SpionAtom

BeitragMo, Apr 05, 2010 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ja auch nicht funktionieren. Du hast die globale Variable frame, und nutzt diese in der Function, also für beide Funktionsaufrufe.

Edit: Ich bin ja das allerletzte!
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Xeres

Moderator

BeitragMo, Apr 05, 2010 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Lass sowas aus der Funktion raus:
Code: [AUSKLAPPEN]
X=MouseX()
Y=MouseY()

Das gehört nicht zu dem, was die Funktion ausrichten soll und gehört eher in die Hauptschleife.

Das eigentliche Problem ist, dass du eine Frame Variable hat, die bei jedem Funktionsaufruf genutzt wird. Lokale Variablen an die Funktion übergeben oder gleich die Effekte in Types unterbringen.
Ich rate zu letzterem.

Edit;
Nein, SpionAtom, bist du nicht Wink
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Die Kiste

BeitragMo, Apr 05, 2010 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank !
Da hätt ich auch selber drauf kommen können Razz
Ach mit types hab ich das auch probiert,ging aber auch in die hose ^^
Ich probiers einfach nocheinmal,evntl kommt diesmal was gescheites raus!
Mfg die Kiste

Die Kiste

BeitragDi, Apr 06, 2010 1:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Tja nach langem rumprobieren hab ich es dann doch geschaft.Nur kommt es irgendwie derbe ins Laggen.
Dabei ist meine cpu auslastung bei gerade 10 %(mit Icq browser etc. offen)
ich komm echt nicht dahinter.Und ja ich hab nix besseres zu tun als um 1 uhr n Beitrag zu schreiben^^
Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer ()
Global Button=LoadAnimImage ("Buttonz.png",100,50,0,10)
Global timer=CreateTimer(15)
Type Button
Field frame
Field bX
Field bY
End Type

Repeat
WaitTimer timer    

      frames(0,0)
      frames(0,60)
      frames(0,120)
      Frames(0,180)
      Frames(0,230)
   Flip 0
Cls

Until KeyHit (1)
End
Function Frames (BtX,BtY)

info.Button =New Button
info\bX = btx
info\bY = bty
X=MouseX()
Y=MouseY()

For info.Button=Each  Button
If ImageRectOverlap(Button,info\BX,info\BY,X,Y,20,20)

   info\Frame = info\Frame+1
      If info\Frame = 9
         info\Frame = 8
      EndIf
Else
   
      If info\frame =0
    info\frame =1

   EndIf
info\frame = info\frame -1

EndIf



DrawImage Button,info\bx,info\by,info\frame
Next
End Function

Mfg Die Kiste
Ps: Komm nicht klar mim einrücken -.-
 

n-Halbleiter

BeitragDi, Apr 06, 2010 1:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Tatsache, dass es "laggt" (falsches Wort eigentlich, du meinst wohl ruckeln.), liegt wohl a) an deinem Timer, den du auf 15 gestellt hast (-> 15 FPS), und

b) daran, dass du in jedem Schleifendurchlauf 5 neue Typeinstanzen erstellst und diese nicht löscht (Die ersten paar Zeilen in deiner Funktion).

Lade dir mal IDEal herunter (eine alternative IDE), damit wird dir das Einrücken so gut wie abgenommen.

Und es ist kein Problem, um 1 Uhr Morgens her Beiträge zu Schreiben, wir sind eben Nachtschwärmer. Wink

Die Kiste

BeitragDi, Apr 06, 2010 1:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einem Timer von 30(Ich nehm an 30fps)
Ruckelts auch,bzw man sieht den effekt nicht.
Bei einem umständlicheren Code siehts selbst mit dem 15er Timer gut aus,und zwar so wie ich es mir vorgestellt hab... Übrigens danke für den Tipp mit IDEal,nur leider kommt bei mir ein fehler beim Comilieren(Endschuldigt mich wen ich es falsch geschrieben hab ^^)Naja darum kümere ich mich morgen.
Vielen Danke && Freundliche Grüße --> Die Kiste
 

n-Halbleiter

BeitragDi, Apr 06, 2010 1:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn der Fehler bei jedem Kompiliervorgang kommt, dann wird es an falsch gesetzten Einstellungen von IDEal liegen, denke ich. Wenn es nur bei bestimmten Codes auftritt, liegt es wohl am Code. Wink

Ich vermute, dass das Ruckeln liegt wohl an meinem vorher angesprochenen Punkt b):
n-Halbleiter hat Folgendes geschrieben:
b) daran, dass du in jedem Schleifendurchlauf 5 neue Typeinstanzen erstellst und diese nicht löscht (Die ersten paar Zeilen in deiner Funktion).

(Korrigiert mich, wenn ich falsch liege.)

Den Effekt sieht man deshalb nicht, weil ja pro Frame die Variable "frame" für jeden Button verändert wird, das heißt, dass nach 5 Frames spätestens der Effekt wieder verwirkt ist, da das Auge ihn nicht unbedingt wahrnimmt (wahrnehmen kann).
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

Xeres

Moderator

BeitragDi, Apr 06, 2010 10:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Unterteile deine Funktion in Zwei; Eine zum Erstellen (der teil mit NEW, vor der Hauptschleife) und eine zum Updaten (der Teil mit For...Each, in der Hauptschleife).

und
Code: [AUSKLAPPEN]
X=MouseX()
Y=MouseY()
gehört immer noch nicht in die Funktion, sondern in die Hauptschleife.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Die Kiste

BeitragMi, Apr 07, 2010 0:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Hilfe!
Mitlerweile hab ich eine viel schnellere Methode gefunden,die den selben effekt bewirkt mit rect.
Ich glaub zwar,das es niemanden was nutzen wird,aber auf anfrage lade ich es im Codearchiv hoch..
lg Die Kiste

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group