PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [XP]Animationsgeschwindigkeit verlangsamen



salamimild
29.04.2010, 16:14
Hi

Ich wollte mal fragen, ob man beim XP, die Geschwindigkeit bei dem die Frames abgespielt werden während einer Animation, verändert werden kann, sprich in meinem Fall, verlangsamt.

Mir geht es etwas zu schnell bei gewissen Animationen.

Geht das?

XGazudin
29.04.2010, 16:19
Öhm klar, bearbeite einfach die animationen. o.o

salamimild
29.04.2010, 16:38
O_O

Ja wie jetzt? Ich kann die Geschwindigkeit bei dem die Frames abgespielt werden einstellen????

The_Burrito
29.04.2010, 19:48
Verlangsamen ist doch gar kein Problem. Einfach jeden Frame doppelt anzeigen.

salamimild
30.04.2010, 12:25
Hab ich mal auprobiert.
Geht zwar, jedoch sieht die Animation leicht "stockend" aus. Also nicht wirklich eine optimale Lösung.

XGazudin
30.04.2010, 14:36
Verlangsamen ist doch gar kein Problem. Einfach jeden Frame doppelt anzeigen.
Das meinte ich, allerdings hast du dann folgendes Problem:

Hab ich mal auprobiert.
Geht zwar, jedoch sieht die Animation leicht "stockend" aus. Also nicht wirklich eine optimale Lösung.

Anstatt nur zu verdoppeln musst du jeden zweiten frame dem nächsten etwas annähern.
Bah, wie erklärt man das nun unmissverständlich...

Also angenommen du hast ein Animationsset von 10 Frames.
Verdopplung = 20 Frames.
das heißt statt Frame 1, 2, 3, 4 etc hast du jetzt Frame 1a, 1b, 2a, 2b, 3a etc....
Nun musst du halt die ganzen "b"-Animationen so verschieben bzw verändern, dass sie einen weiteren zwischenschritt von der vorherigen zur nachofgenden a-Animation darstellen.

Angenommen Frame 1 ist auf position 0, frame 2 auf position 10, frame 3 auf position 20.
bei einer verdopplung wären frame 1a/1b auf 0, 2a/2b auf 10, 3a/3b auf 20...
Für einen flüssigen Ablauf must du nun 1b ca auf position 5 schieben, 2b auf 15, 3b auf 25....(es sei denn 3 ist schon das ende der animation, dann kannste 3b auch einfach löschen...bzw der letzte animationsschritt muss gar nicht erst nicht verdoppelt werden) und so weiter.

salamimild
30.04.2010, 16:00
Ok, das mit der Bewegung ist soweit schon klar.
Aber: Bei einigen Animationen besteht die Bewegung in den einzelnen Bildern.
Zum Beispiel ein Wirbel. Ein ganz simple animation von einem Wirbel ist, wenn man die einzelnen Bilder nacheinander am gleichen Ort einfügt. (vielleicht ca. 10 Frames) So entsteht eine Rotierung, welche aber vom Bild, resp. den Bildern selber entsteht, welche nacheinander angezeigt werden.
Deshalb meine Frage, ob man die Geschwindigkeit von den einzelnen Frames beeinflussen kann.
Der XP lässt sie nämlich schneller als der VX durchrattern, was teilweise ziemlich hektisch aussieht.

FoxClaw
04.05.2010, 11:47
oi,

du willst also die Framerate/Sekunde verringern?

Ich glaube nicht, dass das irgendwo einstellbar ist, habe sowas in der Art zumindest noch nie bemerkt, einstellen zu können und ich kenne den XP ziemlich gut. Hmm, wenn, dann wird dir warscheinlich auch kein Script helfen können, vielleicht gibt es eine Möglichkeit in die Systemeinstellungen vom Maker zu kommen, aber das müsste sich dann jeder genau so einstellen, sonst ist es bei uns wieder schnell.

Naja, aber hat der VX wirklich eine höhere Framerate? Also mehr als die in etwa 20 Frames/Sekunde vom XP? Kann ich mir nicht vostellen...

Ansonsten wie schon erwähnt wurde, mach 2 Frames pro Animationsbild.

Was du noch machen könntest, (was mit ein wenig Arbeit verbunden ist), die Animationen so zu bearbeiten, dass sie mehr Bilder haben, z.B. druch übereinanderlegen der 1. und 2. Animation mit ein wenig Verschommenheit so als Fade effekt, also aus 2 mache 3.

Naja, vielleicht hilfts.

mfg
Fox

XGazudin
04.05.2010, 13:40
oi,

du willst also die Framerate/Sekunde verringern?

Ich glaube nicht, dass das irgendwo einstellbar ist
Doch...und deswegen:

dann wird dir warscheinlich auch kein Script helfen können
Doch ;)

Also mehr als die in etwa 20 Frames/Sekunde vom XP? Kann ich mir nicht vostellen...
Irgendwo in der RGSS des XP ist so weit ich weiß in einer Konstante die 40 als standardmäßige fps festgelegt, ich bin allerdings nur zufällig mal drüber gestolpert und weiß deshalb gerade nicht WO genau das ist.
Insofern wäre es sicher möglich das ganze per Scripting zu manipulieren, das würde dann allerdings für die Gesamtheit der Performance gelten und nicht nur für die Animationen.
imho....bin da ja nun auch nicht so extrem bewandert.

-KD-
05.05.2010, 22:28
Der Maker hat eine Framerate von 40 FPS. Im Maker wird aber oft mit Doppelframes gearbeitet (weiß der Teufel warum die einen so verwirren wollen). So auch bei den Animationen: Jeder Animationsframe wird jeden zweiten Frame gewechselt. Eine Animation dauert also 2 Frames pro Animationsframe. Die Framerate zu ändern ist keine Lösung, weil sich das global auswirken würde. Du kannst aber natürlich die Framerate der Animation abändern. Einfach unteres Script einfügen und an den Namen deiner Animation ein [3] dranhängen - dann braucht die Animation 3 Frames statt 2 Frames pro Animationsframe. Also beispielsweise: Feuerball[3].


class RPG::Animation

def time_per_frame
if animation_name =~ /\[(\d+)\]/ then
Integer($1)
else
2
end
end

end

class RPG::Sprite
def update
super
if @_whiten_duration > 0
@_whiten_duration -= 1
self.color.alpha = 128 - (16 - @_whiten_duration) * 10
end
if @_appear_duration > 0
@_appear_duration -= 1
self.opacity = (16 - @_appear_duration) * 16
end
if @_escape_duration > 0
@_escape_duration -= 1
self.opacity = 256 - (32 - @_escape_duration) * 10
end
if @_collapse_duration > 0
@_collapse_duration -= 1
self.opacity = 256 - (48 - @_collapse_duration) * 6
end
if @_damage_duration > 0
@_damage_duration -= 1
case @_damage_duration
when 38..39
@_damage_sprite.y -= 4
when 36..37
@_damage_sprite.y -= 2
when 34..35
@_damage_sprite.y += 2
when 28..33
@_damage_sprite.y += 4
end
@_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
if @_damage_duration == 0
dispose_damage
end
end
if @_animation != nil and (Graphics.frame_count % @_animation.time_per_frame == 0)
@_animation_duration -= 1
update_animation
end
if @_loop_animation != nil and (Graphics.frame_count % @_loop_animation.time_per_frame == 0)
update_loop_animation
@_loop_animation_index += 1
@_loop_animation_index %= @_loop_animation.frame_max
end
if @_blink
@_blink_count = (@_blink_count + 1) % 32
if @_blink_count < 16
alpha = (16 - @_blink_count) * 6
else
alpha = (@_blink_count - 16) * 6
end
self.color.set(255, 255, 255, alpha)
end
@@_animations.clear
end
end