Your SlideShare is downloading. ×
寺子屋クスール @STATION5
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

寺子屋クスール @STATION5

1,954
views

Published on

2010年5月30日 STATION5で行われた寺子屋クスールのセッション2 [Flash CS5x科学 byくるくる研究室]で使用されたスライドです。

2010年5月30日 STATION5で行われた寺子屋クスールのセッション2 [Flash CS5x科学 byくるくる研究室]で使用されたスライドです。

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,954
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. くるくる研究室 ケータイ Flash で 物理演算をしてみた
  • 2. http://labs.kuru2jam.com/ @hara3 @biscuitjam
  • 3. 作品紹介 http://labs.kuru2jam.com/ くるくる研究室
  • 4. 科学?!
  • 5. センサー大好き!
  • 6. Flash Lite 4
  • 7. くるくる研究室 ケータイ Flash で 物理演算をしてみた
  • 8. ActionScript3 で開発 !
  • 9. 重力計算をしてみる
  • 10. 必要なプロパティ 重力加速度 (gravity) 跳ね返り系数 (bounce) 速度 (vy)
  • 11. 計算の手順
    • 現在の速度に重力加速度を足す
    • 今の座標に速度を足す
    • 跳ね返る処理
    • この手順を EnterFrame に書くだけ!
  • 12. 速度 重力加速度 速度 重力加速度
  • 13. this . addEventListener ( Event . ENTER_FRAME ,_enterFrameHandler); function _enterFrameHandler(e: Event ){ // 現在の速度に重力加速度を足す vy += gravity; // 今の座標に速度を足す y += vy; // 跳ね返る処理 // ボール底の座標がステージの最下部を超えたら if ( y + height / 2 > stage . stageHeight ){ // ボールの座標をステージの最下部へ y = stage . stageHeight – height / 2; // 速度に跳ね返り係数をかけると跳ね返る vy *= bounce; } }
  • 14. デモ
  • 15. タップの判定
  • 16. タッチイベント this . addEventListener ( TouchEvent.TOUCH_TAP , onTouchTap); function onTouchTap(e: TouchEvent ){ addBall(e. stageX ,e. stageY ); }
  • 17. デモ
  • 18. DeciceCentral CS5 新機能
  • 19. 振れます。
  • 20. デモ
  • 21. 加速度の取得
  • 22. さようなら fscommand2
  • 23. Accelerometer クラス
  • 24. //Accelerometer オブジェクトを作成する var acc: Accelerometer = new Accelerometer (); // 端末が加速度センサを使えるかチェックする var isSupportedAcc: Boolean = Accelerometer.isSupported ; if (isSupportedAcc){ // 加速度の取得開始 acc. addEventListener ( AccelerometerEvent . UPDATE , _updateAccHandler); } function _updateAccHandler(e: AccelerometerEvent ){ // 加速度を取得した時の処理 ・・・ }
  • 25. 「振る」動作の判定
  • 26. // 以前かかった力 var preF: Number = 0; function _updateAccHandler(e: AccelerometerEvent ){ // マグニチュードの計算 var ax: Number = e. accelerationX ; //X 軸方向の加速度 var ay: Number = e. accelerationY ; //Y 軸方向の加速度 var az: Number = e. accelerationZ ; //Z 軸方向の加速度 // 端末にかかった力の大きさを計算 ( 各加速度を二乗して足す ) var f: Number = ax * ax + ay * ay + az * az; // 前にかかった力との差を取る。 // この差が大きければ、たくさん振ったということ var m: Number = Math . abs (f - preF); if (m > 0.1){ addBall( Math.random () * 240,-30); } // 以前かかった力として更新 preF = f; }
  • 27. デモ
  • 28. 衝突判定したい!
  • 29. 計算がめんどい …
  • 30. 帰りたい …
  • 31. そうだ。 AS3 じゃないか!
  • 32. AS3 神様、 力をお貸し下さい
  • 33. Box2DFlashAS3 http://sourceforge.net/projects/box2dflash/
  • 34. 設定の流れ
    • 重力を設定
    • シミュレーションの場 (world) を作成
    • 個々のオブジェクトを作成
    • シミュレーション実行
  • 35. オブジェクトの作成
    • 形を設定
    • 性質を設定
    • 実体 (Body) を作成
    • Body とムービークリップを結びつける
    • Body をワールド内に生成する
    • Body に性質を適用
  • 36. ( 実際のコードから抜粋 ) function initBox2d(){ // 重力設定 var gravity:b2Vec2 = new b2Vec2(0.0, 10.0); // ワールドを設定 _world = new b2World( gravity, true); // ボールを生成 addBall(120,40); // 更新 addEventListener ( Event . ENTER_FRAME , update); }
  • 37. function addBall(xx: Number , yy: Number ){ // ボールの形を作成 var circleDef : b2CircleShape = new b2CircleShape(); var radius : uint = 20; circleDef.SetRadius(radius / _m_physScale); // ボールの性質を設定 _fixtureDef.friction = 10; _fixtureDef.density = 10; _fixtureDef.restitution = 0.9; _fixtureDef.shape = circleDef; ・ ・ ・ 続く
  • 38. ( 続き ) // ボールのボディを設定 var bodyDef : b2BodyDef = new b2BodyDef(); bodyDef.type = b2Body.b2_dynamicBody;// 重力の影響を受けるようにする bodyDef.position.Set(xx / _m_physScale, yy / _m_physScale); // ボディとムービークリップ (Ball) を結びつける bodyDef.userData = new Ball(); bodyDef.userData. x = bodyDef.position. x ; bodyDef.userData. y = bodyDef.position. y ; addChild (bodyDef.userData);// ムービークリップ (Ball) を画面表示 // 作成した bodyDef をワールド内に生成する var circleBody : b2Body = _world.CreateBody(bodyDef); // 生成した circleBody にボールの性質を適用 circleBody.CreateFixture(_fixtureDef); }
  • 39. function update(e: Event ): void { // ワールド内の時間をすすめる _world.Step(_m_timeStep, _m_iterations, _m_positionIterations); _world.ClearForces(); // ワールド内のボディの状態をムービークリップに対応させる for ( var bb:b2Body = _world.GetBodyList(); bb; bb = bb.GetNext()){ var mc:MovieClip = MovieClip(bb.GetUserData()); if (mc){ mc. x = bb.GetPosition().x * _m_physScale; mc. y = bb.GetPosition().y * _m_physScale; mc. rotation = bb.GetAngle() * (180 / Math.PI ); } } }
  • 40. デモ
  • 41. その他の機能
  • 42. マルチタッチ Multitouch . inputMode = MultitouchInputMode . GESTURE ; GPS Geolocation クラス ( AIR 限定 )
  • 43. 実機テストしてね
  • 44. おまけ FlashLite4 はできる子
  • 45. ありがとうございました。

×