|
Verfasser |
Nachricht |
DoubleDD_aka_domis4
Durchstarter
Beiträge: 62
Gruppe: User
Registriert seit: Sep 2011
Status:
Offline
Danke erhalten: 8
|
[C] png Animation
Hai
ich habe derzeit 2 probleme in C.
ich versuche eine png animation abzuspielen (bestehend aus 4 png dateien)
beim gehen wird: walkframe += 1;
benutzt. Bisher hatte ich eine if abfrage, die eine Menge abfrägt^^ großer quatsch.
ich hätte einen Lösungsweg im auge:
int i;
if (dir == 1) {blitAlphaImageToScreen(0,0,16,20,PlayerUp +string(i),x,y);}
beim gehen i+=1;
und:
if (walkframe == 4) {
walkframe = 1;
leider funktioniert das natürlich nicht so^^ wie könnte ich das lösen?
und zu 2: die Animation läuft viel zu schnell. Deshalb will ich sie ein wenig langsamer abspielen lassen. Gibt es dafür eine Möglichkeit?^^
lg, domis4
|
|
03.03.2012 19:08 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: [C] png Animation
vor diesen problemen stand ich auch schon.
dein zweites problem ist recht einfach zu lösen. du musst einfach jeden frame in ner if-schleife ne zahl durchzählen, und immer wenn die zahl nen bestimmten wert hat wird sie zurückgesetzt und die animation wird einmal ausgeführt, etwa so:
... int main(){ int substate=0; ... while(1){ substate++; if(substate==4){ substate=0; *CODE-FÜR-DIE-ANIMATION* } ... }
bei der Laufanimation bleibt dir nicht viel anderes übrig, als jedes bild der animation in nem switch anzeigen zu lassen. Ich hab has z.B. so gemacht, dass alle 12 Bilder der animationen bei mir (3 bilder, 4 richtungen, daher 12) in einem array geladen sind. Dieses Array ist in einer Struktur gespeichert, welche bei mir alle mögliche informationen über figuren enthält. zusätzlich hab ich noch integer mit dem namen state und substate in der struktur gespeichert. und dann hab ich ne methode gebaut, die errechnet welche figur im kommenden frame wo ist und vorallem, mit welchem bild. die methode habe ich thinkfigur genannt und ihr wird beim aufruf die adresse zu einer Struktur vom typ player gegeben (so heisst die struktur die die infos wie die bilde rund so enthält). Diese methode sieht bei mir so aus:
http://pastebin.com/DWcAZvTz
(stör dich erstmal nicht an dem bisschen kollisionsberechnung dass da noch drin ist^^)
diese variablen sind bei dem code wichtig:
- state: animationsstatus, ist immer zwischen inklusive 1 und 4 (4 frames pro schrittanimation)
- substate: diese am anfang erwähnte hochzählvariable, damit die animation nicht zu schnell abläuft
- ani: 0, wenn die animation aus ist, 1 wenn sie läuft.
- faceing: die richtung in die die figur guckt (zwischen 1 und 4)
- speed: die animationsgeschwindigkeit (und damit auch die figurgeschwindigkeit)
- bildnummer: die position von dem Bild in dem array mit allen animationsframes
- y: figur y-position
- posby: mein spiel basiert auf 32*32 pixel kacheln. posby enthält die y-koordinate der figur, aber in kacheln nicht in pixeln. sollte immer 1/32 von y sein
- x: figur x-position
- posbx: posbx enthält die x-koordinate der figur, aber in kacheln nicht in pixeln. sollte immer 1/32 von x sein
mensch, jetzt hab ich lust wieder n bisschen was zu coden, doof nur dass ich mein psp kabel dafür raussuchen müsste ^^
dann könnte ich mal wieder n aktuelles video davon machen
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2012 19:57 von Neutrosider.
|
|
03.03.2012 19:45 |
|
Folgende User bedanken sich: |
|
DoubleDD_aka_domis4
Durchstarter
Beiträge: 62
Gruppe: User
Registriert seit: Sep 2011
Status:
Offline
Danke erhalten: 8
|
RE: [C] png Animation
danke, das hat perfekt funktioniert
ich habe ein paar deiner Videos auf Yotube gesehen, sieht eigentlich sehr robust aus
Vor ein paar Tagen habe ich eine Frage zum Grid erstellt, wie man denn den Player in einem Grid halten kann. Leider hat sich keiner gemeldet^^ vl magst du mir ja helfen.
|
|
03.03.2012 21:21 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: [C] png Animation
das trifft sich gut. Die funktion die ich gepostet hab zeigt ja die methode die bei mir die bewegung der figuren berechnet und die bilder bestimmt. Und mein spiel basiert ja ebenfalls auf einer Rasterbewegung, und auch diese Rasterbewegung ist in der von mir geposteten Funktion allerdings habe ich, damit die bewegung viel flüssiger aussieht, keine wirklichen pausen zwischen den einzelnen animationsbildern, sondern die figur bewegt sich bei mir 8 pixel in die gegeben richtung, ohne das bild zu ändern, dann wird das bild geändert und er geht weitere 8 pixel usw. hört sich erst doof an, lässt die laufanimation aber viel flüssiger und besser aussehen!
Gehen wir mal einen Schritt einer Figur nach rechts durch. wir haben dann diese variablen definiert (vor dem schritt, btw. am schrittanfang):
- state: 2 (das 2. bild der animation, das erste und letzte (1 und 4) ist stehen)
- substate: 0 (hochzählvariable zur geschw.-kontrolle)
- ani: 1 (=Animation gestartet)
- faceing: 2 (figur guckt/läuft nach rechts)
- speed: 4
- bildnummer: 4 (siehe bild, nummern sind von 0 bis 11)
- y: 64
- posby: 2 (ich setze den einfach mal auf 2|2)
- x: 64
- posbx: 2
Das ist das Bild:
ok. Folgendes Passiert in der methode in den jeweiligen Frames (nach jedem Frame wird halt der bildschirm gezeichnet):
- Frame 1
- figur->substate++; (substate: 1)
figur->posbx++; (posbx: 3) (nun "ist" die figur schon auf dem nächsten feld. zur kollisionsberechnung)
- figur->x+=(8/figur->speed); (x: 68)
- Frame 2
- figur->substate++; (substate: 2)
- figur->x+=(8/figur->speed); (x: 70)
- Frame 3
- figur->substate++; (substate: 3)
- figur->x+=(8/figur->speed); (x: 72)
- Frame 4
- figur->substate++; (substate: 4)
- if(figur->substate>=figur->speed) figur->substate=0; (substate: 0)
- figur->x+=(8/figur->speed); (x: 74)
- figur->bildnummer=5; (bildnummer: 5)
- figur->state=3; (state: 3)
- Frame 5
- figur->substate++; (substate: 1)
- figur->x+=(8/figur->speed); (x: 76)
- Frame 6
- figur->substate++; (substate: 2)
- figur->x+=(8/figur->speed); (x: 78)
- Frame 7
- figur->substate++; (substate: 3)
- figur->x+=(8/figur->speed); (x: 80)
- Frame 8
- figur->substate++; (substate: 4)
- if(figur->substate>=figur->speed) figur->substate=0; (substate: 0)
- figur->x+=(8/figur->speed); (x: 82)
- figur->bildnummer=4; (bildnummer: 4)
- figur->state=4; (state: 4)
- Frame 9
- figur->substate++; (substate: 1)
- figur->x+=(8/figur->speed); (x: 84)
- Frame 10
- figur->substate++; (substate: 2)
- figur->x+=(8/figur->speed); (x: 86)
- Frame 11
- figur->substate++; (substate: 3)
- figur->x+=(8/figur->speed); (x: 88)
- Frame 12
- figur->substate++; (substate: 4)
- if(figur->substate>=figur->speed) figur->substate=0; (substate: 0)
- figur->x+=(8/figur->speed); (x: 90)
- figur->bildnummer=3; (bildnummer: 3)
- figur->state=1; (state: 1)
- Frame 13
- figur->substate++; (substate: 1)
- if(figur->bildnummer==3)figur->x+=(8/figur->speed); (x: 92)
- Frame 14
- figur->substate++; (substate: 2)
- if(figur->bildnummer==3)figur->x+=(8/figur->speed); (x: 94)
- Frame 15
- figur->substate++; (substate: 3)
- if(figur->bildnummer==3)figur->x+=(8/figur->speed); (x: 96)
- Frame 16
- figur->substate++; (substate: 4)
- if(figur->substate>=figur->speed) figur->substate=0; (substate: 0)
- if(figur->bildnummer==3)figur->x+=(8/figur->speed); (x: 98)
- figur->bildnummer=4; (bildnummer: 4)
- figur->ani=0; (ani: 0) (animation zuende)
er ist also einen block (32 pixel) nach rechts gegangen, mit animation ^^
ich bin dafür einfach nur frame für frame die methode furchgegangen und habe alle codezeilen die ausgeführt werden aufgeschrieben und dahinter in klammern welchen wert sie auf was gesetzt haben.
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2012 22:23 von Neutrosider.
|
|
03.03.2012 22:20 |
|
Folgende User bedanken sich: |
|
DoubleDD_aka_domis4
Durchstarter
Beiträge: 62
Gruppe: User
Registriert seit: Sep 2011
Status:
Offline
Danke erhalten: 8
|
RE: [C] png Animation
Zuerst: Tausend Dank für diesen Ansatz.
Ich habe es jetzt so gelöst:
http://pastebin.com/faTHLL94
funktioniert prima, mit der Hilfe eines Kumpels^^
wenn ich aber 2 Tasten drücke, rennt er unaufhaltbar in die zuletzt gedrückte Richtung.
|
|
04.03.2012 20:14 |
|
|
|
duLouser
Halbprofi
Beiträge: 138
Gruppe: User
Registriert seit: Sep 2011
Status:
Offline
Danke erhalten: 49
|
RE: [C] png Animation
tja, das nennt man einen bug. Den solltes du fixen ^^
Das Leben ist ein scheiß Spiel, aber die Grafik ist Geil!!!
Blade! 0.7
|
|
04.03.2012 20:51 |
|
|
|