Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
くるくる研究室 ケータイ Flash で 物理演算をしてみた
http://labs.kuru2jam.com/ @hara3  @biscuitjam
作品紹介 http://labs.kuru2jam.com/ くるくる研究室
科学?!
センサー大好き!
Flash Lite 4
くるくる研究室 ケータイ Flash で 物理演算をしてみた
ActionScript3 で開発 !
重力計算をしてみる
必要なプロパティ 重力加速度 (gravity) 跳ね返り系数 (bounce) 速度 (vy)
計算の手順 <ul><li>現在の速度に重力加速度を足す </li></ul><ul><li>今の座標に速度を足す </li></ul><ul><li>跳ね返る処理 </li></ul><ul><li>この手順を EnterFrame に書くだ...
速度 重力加速度 速度 重力加速度
this . addEventListener ( Event . ENTER_FRAME ,_enterFrameHandler); function  _enterFrameHandler(e: Event ){ // 現在の速度に重力加速...
デモ
タップの判定
タッチイベント this . addEventListener ( TouchEvent.TOUCH_TAP , onTouchTap); function  onTouchTap(e: TouchEvent ){ addBall(e. sta...
デモ
DeciceCentral CS5 新機能
振れます。
デモ
加速度の取得
さようなら fscommand2
Accelerometer クラス
//Accelerometer オブジェクトを作成する var  acc: Accelerometer  =  new Accelerometer (); // 端末が加速度センサを使えるかチェックする var  isSupportedAcc:...
「振る」動作の判定
// 以前かかった力 var  preF: Number  = 0; function  _updateAccHandler(e: AccelerometerEvent ){ // マグニチュードの計算 var  ax: Number  = e...
デモ
衝突判定したい!
計算がめんどい …
帰りたい …
そうだ。 AS3 じゃないか!
AS3 神様、 力をお貸し下さい
Box2DFlashAS3 http://sourceforge.net/projects/box2dflash/
設定の流れ <ul><li>重力を設定 </li></ul><ul><li>シミュレーションの場 (world) を作成 </li></ul><ul><li>個々のオブジェクトを作成 </li></ul><ul><li>シミュレーション実行 <...
オブジェクトの作成 <ul><li>形を設定 </li></ul><ul><li>性質を設定 </li></ul><ul><li>実体 (Body) を作成 </li></ul><ul><li>Body とムービークリップを結びつける </li...
( 実際のコードから抜粋 ) function  initBox2d(){ // 重力設定 var  gravity:b2Vec2 = new b2Vec2(0.0, 10.0); // ワールドを設定 _world =  new  b2Wor...
function  addBall(xx: Number , yy: Number ){ // ボールの形を作成 var  circleDef : b2CircleShape =  new  b2CircleShape(); var  radi...
( 続き ) // ボールのボディを設定 var  bodyDef : b2BodyDef =  new  b2BodyDef(); bodyDef.type = b2Body.b2_dynamicBody;// 重力の影響を受けるようにする ...
function  update(e: Event ): void { // ワールド内の時間をすすめる _world.Step(_m_timeStep, _m_iterations, _m_positionIterations); _worl...
デモ
その他の機能
マルチタッチ Multitouch . inputMode  =   MultitouchInputMode . GESTURE ; GPS Geolocation クラス ( AIR 限定 )
実機テストしてね
おまけ FlashLite4 はできる子
ありがとうございました。
Upcoming SlideShare
Loading in …5
×

寺子屋クスール @STATION5

2,214 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

寺子屋クスール @STATION5

  1. 1. くるくる研究室 ケータイ Flash で 物理演算をしてみた
  2. 2. http://labs.kuru2jam.com/ @hara3 @biscuitjam
  3. 3. 作品紹介 http://labs.kuru2jam.com/ くるくる研究室
  4. 4. 科学?!
  5. 5. センサー大好き!
  6. 6. Flash Lite 4
  7. 7. くるくる研究室 ケータイ Flash で 物理演算をしてみた
  8. 8. ActionScript3 で開発 !
  9. 9. 重力計算をしてみる
  10. 10. 必要なプロパティ 重力加速度 (gravity) 跳ね返り系数 (bounce) 速度 (vy)
  11. 11. 計算の手順 <ul><li>現在の速度に重力加速度を足す </li></ul><ul><li>今の座標に速度を足す </li></ul><ul><li>跳ね返る処理 </li></ul><ul><li>この手順を EnterFrame に書くだけ! </li></ul>
  12. 12. 速度 重力加速度 速度 重力加速度
  13. 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. 14. デモ
  15. 15. タップの判定
  16. 16. タッチイベント this . addEventListener ( TouchEvent.TOUCH_TAP , onTouchTap); function onTouchTap(e: TouchEvent ){ addBall(e. stageX ,e. stageY ); }
  17. 17. デモ
  18. 18. DeciceCentral CS5 新機能
  19. 19. 振れます。
  20. 20. デモ
  21. 21. 加速度の取得
  22. 22. さようなら fscommand2
  23. 23. Accelerometer クラス
  24. 24. //Accelerometer オブジェクトを作成する var acc: Accelerometer = new Accelerometer (); // 端末が加速度センサを使えるかチェックする var isSupportedAcc: Boolean = Accelerometer.isSupported ; if (isSupportedAcc){ // 加速度の取得開始 acc. addEventListener ( AccelerometerEvent . UPDATE , _updateAccHandler); } function _updateAccHandler(e: AccelerometerEvent ){ // 加速度を取得した時の処理 ・・・ }
  25. 25. 「振る」動作の判定
  26. 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. 27. デモ
  28. 28. 衝突判定したい!
  29. 29. 計算がめんどい …
  30. 30. 帰りたい …
  31. 31. そうだ。 AS3 じゃないか!
  32. 32. AS3 神様、 力をお貸し下さい
  33. 33. Box2DFlashAS3 http://sourceforge.net/projects/box2dflash/
  34. 34. 設定の流れ <ul><li>重力を設定 </li></ul><ul><li>シミュレーションの場 (world) を作成 </li></ul><ul><li>個々のオブジェクトを作成 </li></ul><ul><li>シミュレーション実行 </li></ul>
  35. 35. オブジェクトの作成 <ul><li>形を設定 </li></ul><ul><li>性質を設定 </li></ul><ul><li>実体 (Body) を作成 </li></ul><ul><li>Body とムービークリップを結びつける </li></ul><ul><li>Body をワールド内に生成する </li></ul><ul><li>Body に性質を適用 </li></ul>
  36. 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. 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. 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. 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. 40. デモ
  41. 41. その他の機能
  42. 42. マルチタッチ Multitouch . inputMode = MultitouchInputMode . GESTURE ; GPS Geolocation クラス ( AIR 限定 )
  43. 43. 実機テストしてね
  44. 44. おまけ FlashLite4 はできる子
  45. 45. ありがとうございました。

×