Animierte Bilder mit Festgelegter Anzahl
Übersicht

![]() |
Die KisteBetreff: Animierte Bilder mit Festgelegter Anzahl |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Mfg Die Kiste |
||
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Die Kiste |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank !
Da hätt ich auch selber drauf kommen können ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() |
||
![]() |
Die Kiste |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() 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) |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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()
gehört immer noch nicht in die Funktion, sondern in die Hauptschleife.
Y=MouseY() |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Die Kiste |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group