Skripting/Animation mit Sound
Aus PantheonWiki
Um auf Animationen zu reagieren bedarf es eines Listeners. Dieser wird als neue RubyKlasse deklariert, dabei wird eine Methode überschrieben, die immer dann aufgerufen wird, wenn ein vorher festgelegter Zeitindex überschritten wurde.
Die Einrichtung eines Sounds erfolgt über$AM.createSoundSampleActor, diesen Sound attached man einfach an den Actor mit dem Mesh, dessen Animation man abspielen möchte.
Dann startet man die Animation und hängt an diese Animation eine zuvor erstellte Instanz des Listeners.
Sicherlich gäbe es auch die Möglichkeit den Actor mit dem Sound als Instanzvariable zu übergeben, aber so ist es denke ich auch einfach zu verstehen.
# Definition des AnimationsFrameListeners
class MachWasBeiFrameErreichtListener < AnimationFrameListener
# Diese Methode wird aufgrufen, wenn ein vorher festgelegtes Frame erreicht wird
def animationFrameReached(anEvent)
# anEvent - enthält Informationen wie die verursachende Animation und das Frame
print( "Sowas, schon wieder erreicht" );
animActor = anEvent.getAnimation().getMeshObject().getActor();
tonActor = animActor.getChildByName("SteeleTon");
tonActor.getControlledObject().play(0);
end
end
# Actor mit Mesh erzeugen
animActor = $AM.createMeshActor( "Steele", "held.mesh", 0, 0.0 );
animActor.placeIntoScene( [160.0, 24.0, 160.0], [0.0, 0.0, 0.0] );
# Actor mit Sound erzeugen
soundActor = $AM.createSoundSampleActor("SteeleTon","doorcreak.ogg");
animActor.attach(soundActor);
# Mesh zurückgeben
mesh = animActor.getControlledObject();
# Animation starten
anim = mesh.startAnimation( "gehloop", 0.5 , 0 );
# AnimationFrameListener hinzufügen
animFrameListener = MachWasBeiFrameErreichtListener.new();
# Bei Zeit 0.09 soll was passieren
anim.addAnimationFrameListener( animFrameListener, 0.09 );
