PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [XP] Animationen der Zustände im Kampfsystem



Rettan
01.12.2011, 19:16
Hallo,
ich bin jetzt schon seit einiger Zeit verzweifelt am suchen...

Man kann es ja einstellen, dass manche Zustände beim Kämpfer eine Animation darstellen. Aber wo wird diese Animation denn aufgerufen?
Ich habe lediglich in 'Game_Battler 2' die Funktion 'state_animation_id' gefunden, die offenbar die ID der Animation des Zustands mit der höchsten Priorität zurück gibt. Schön und gut, aber wo wird etwas damit angestellt?

Mein Ziel ist folgendes: Ich würde gerne bewirken, dass es nicht bei dem Zustand mit der höchsten ID bleibt, sondern sämtliche Zustände im Array nacheinander angezeigt werden. Aber ich weiß nicht in welchem Kontext die Funktion steht, was die Sache irgendwie nicht einfach macht.

Wäre nett, wenn mir mal jemand erklären könnte, wo ich die Anzeige der Animationen genau finde.

Shining Advances
01.12.2011, 21:05
in den game_* klassen wird bloß die information gespeichert und manipuliert. die eigentliche verwendung der informationen geschieht immer in den scene_* oder sprite_* klassen.
da es hier um die anzeige einer animation geht, empfehle ich dir die sprite_battler klasse ;)
Zeile 60-64 dürften wohl am ehesten von interesse sein.

übrigens liefert der xp eine such funktion. einfach rechtsklick auf die linke leiste mit den skripten und find auswählen.
wenn du dort state_animation_id eingibst, findest du alle stellen, an denen die methode aufgerufen oder verändert wird.

PS:
die methode loop_animation, die dort verwendet wird, ist NICHT in den skripten definiert, sondern in der DLL.
in der hilfedatei des makers (artikel RPG::Sprite) kannst du jedoch den rubycode nachlesen/kopieren.

Rettan
01.12.2011, 21:30
Wow, danke. Auf genau so eine Antwort habe ich gehofft.
Dann werde ich mich mal da ran machen das um zu basteln. Ich werde dann mal meinen Erfolg (oder Fehlschlag) hier posten.

Todu
02.12.2011, 16:53
Das schöne ist, RPG::Sprite hat den kompletten Quellcode in der Hilfedatei, das ist extrem nützlich, um auf Grundlage von RPG::Sprite diese oder Subklassen davon umzuschreiben.

Rettan
03.12.2011, 09:12
Okay, nach einigem Hin und Her hab ich es dann echt geschafft.

Nicht schön, aber läuft mit den folgenden Funktionsumbauten:


class Sprite_Battler < RPG::Sprite
def initialize(viewport, battler = nil)
@time_count = 0
@state_count = 1
end

def update
if @battler.damage == nil# and
# @battler.state_animation_id != @state_animation_id
if @time_count == 50
if @state_count < @battler.states.size
@state_count += 1
else
@state_count = 1
end
@time_count = 0
else
@time_count += 1
end
@state_animation_id = @battler.state_animation_id(@state_count - 1)
loop_animation($data_animations[@state_animation_id])
end
end
class Game_Battler
def state_animation_id(count = 0)
# If no states are added
if @states.size == 0
return 0
end
# Return state animation ID with maximum rating
return $data_states[@states[count]].animation_id
end
end

@state_count hab ich nur mal testweise auf 50 gestellt, mit dem Wert werde ich nachher noch ein wenig herum spielen. Erstmal sollte er nur deutlich über 40 Frames liegen, damit ich mal locker über eine Sekunde komme und so jeder Zustand sicher angezeigt wird.

Um ehrlich zu sein, ich hab jetzt erstmal das ganze System verstanden, so mit den .update-Funktionen und dass die 40 mal pro Sekunde aufgerufen werden und so ^_^
Bleibt zu hoffen, dass das so funktioniert. Falls jemand potenzielle Fehler sieht, bitte sagen.