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 );
Persönliche Werkzeuge
Link zur berliOS-Projektseite