さて最終回となる第4回は、
Flashにおけるアニメーションの方法
Flashでオブジェクトを動かすには、
- FlashIDEを使って、
動く前のオブジェクトと動く後のオブジェクトを異なるフレームに置いてぱらぱら漫画のように見せる方法 - Actionscriptを使用して、
オブジェクトのプロパティ (位置や色等) をフレーム毎に変更する方法
前者はキャラクターの手足を動かすなど細やかな動き、
オープンソースのActionscriptのアニメーションライブラリは、
wonderflでは、
- tweener, version: 1.
31. 74 - TweenLite, ver10.
09 - TweenMax, ver10.
09 - tweensy, ver0.
2.2
wonderflでtweensy入門
tweensyはその中でも最も新参のライブラリで、
gihyo.
このサンプルと同じものを、
このコードは以下のとおりです。確認してみましょう。
1. // tweensy version of this
2. // http://gihyo.jp/dev/feature/01/flash-sdk/0006
3. package{
4. import flash.display.Sprite;
5. import flash.events.MouseEvent;
6. import com.flashdynamix.motion.Tweensy;
7.
8. public class Anime2 extends Sprite{
9. public function Anime2():void{
10. // クリックイベントを監視する
11. stage.addEventListener("click", clickHandler);
12. }
13.
14. private function clickHandler(event:MouseEvent):void {
15. // 円を作成
16. var s:Sprite = new Sprite();
17. s.graphics.beginFill(Math.random() * 0x1000000);
18. s.graphics.drawCircle(0, 0, 10);
19. s.graphics.endFill();
20. addChild(s);
21.
22. // 円をクリックされた位置に移動
23. s.x = event.stageX;
24. s.y = event.stageY;
25. s.scaleX = s.scaleY = 0;
26.
27. Tweensy.to(s, {
28. scaleX: 5, // s の scaleX を 5 まで遷移
29. scaleY: 5 // s の scaleY を 5 まで遷移
30. }, 1 ); // 第3引数がduration
31. }
32. }
33. }
Tweenerのサンプルとの差分は、
なお、
public static function to(instance:Object, to:Object,
duration:Number = 0.5, ease:Function = null, delayStart:Number = 0,
update:Object = null, onComplete:Function = null,
onCompleteParams:Array = null):TweensyTimeline
つまり、
今回のサンプルでは使用している引数の数は3つですが、
- トランジションを変更してみる
(第4引数) - Tweenerの特集にあるようにアニメーション完了後に呼ばれるコールバック関数を設定してみる
(tweensyではto関数の第7引数)
また、
Papervision3D x tweensy
それでは、
以下に、
コードは以下のとおりです。
1. // forked from mash's papervision3d light and a flatshadedcube
2. // forked from mash's papervision3d simple example (cube)
3. package {
4. import flash.display.*;
5. import flash.events.*;
6.
7. import org.papervision3d.cameras.Camera3D;
8. import org.papervision3d.events.InteractiveScene3DEvent;
9. import org.papervision3d.materials.*;
10. import org.papervision3d.objects.*;
11. import org.papervision3d.objects.primitives.Cube;
12. import org.papervision3d.render.BasicRenderEngine;
13. import org.papervision3d.scenes.Scene3D;
14. import org.papervision3d.materials.utils.MaterialsList;
15. import org.papervision3d.view.Viewport3D;
16. import org.papervision3d.lights.PointLight3D;
17. import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
18.
19. import com.flashdynamix.motion.Tweensy;
20.
21. public class PV3D_01 extends Sprite {
22. private var camera :Camera3D;
23. private var scene :Scene3D;
24. private var viewport :Viewport3D;
25. private var renderer :BasicRenderEngine;
26.
27. private var cube :Cube;
28.
29. public function PV3D_01() {
30. camera = new Camera3D();
31. camera.x = 0;
32. camera.y = 0;
33. camera.z = -1000;
34.
35. scene = new Scene3D();
36. viewport = new Viewport3D( stage.stageWidth, stage.stageHeight, false, true );
37. renderer = new BasicRenderEngine();
38. addChild( viewport );
39.
40. var light:PointLight3D = new PointLight3D(false);
41. light.x = 0;
42. light.y = 0;
43. light.z = -1000;
44.
45. var material :FlatShadeMaterial = new FlatShadeMaterial(light, 0xD7261C );
46. material.interactive = true;
47.
48. var materials :MaterialsList = new MaterialsList( { all : material } );
49. cube = new Cube( materials );
50. cube.x = 0;
51. cube.y = 0;
52. cube.z = 0;
53. cube.addEventListener( InteractiveScene3DEvent.OBJECT_CLICK, function(e :InteractiveScene3DEvent) :void {
54. Tweensy.to( camera, { z :camera.z+100 }, 0.3, null, 0, null, function() :void {
55. Tweensy.to( camera, { z: -1000 }, 0.3 );
56. });
57. });
58. scene.addChild( cube );
59.
60. addEventListener( Event.ENTER_FRAME, onEnterFrame );
61. }
62.
63. public function onEnterFrame(e:Event): void {
64. cube.rotationX += ( mouseX - stage.stageWidth /2 ) / 200;
65. cube.rotationY += ( mouseY - stage.stageHeight/2 ) / 200;
66.
67. renderer.renderScene( scene, camera, viewport );
68. }
69. }
70. }
Papervision3Dの3Dの世界で、
- 36行目:Viewport3Dの第四引数interactiveをtrueに
- 45~48行目:materialのinteractiveをtrueに
これらを設定して、
cube.addEventListener( InteractiveScene3DEvent.OBJECT_CLICK, Function )
クリックイベントのハンドラでは、
まとめ
さて4回を通して、
今回ご紹介できなかったFlashの機能も、
wonderflのFlash開発者達が生み出すコードは、
以上、
wonderflをつかって試してみたいことがありましたら、
最後までお読みいただき、