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

寺子屋クスール @STATION5

on

  • 2,408 views

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

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

Statistics

Views

Total Views
2,408
Views on SlideShare
1,936
Embed Views
472

Actions

Likes
0
Downloads
3
Comments
0

6 Embeds 472

http://terakoya.cshool.jp 383
http://blog.cshool.jp 73
http://www.slideshare.net 13
file:// 1
http://static.slidesharecdn.com 1
http://s.deeeki.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

寺子屋クスール @STATION5 寺子屋クスール @STATION5 Presentation Transcript

  • くるくる研究室 ケータイ Flash で 物理演算をしてみた
  • http://labs.kuru2jam.com/ @hara3 @biscuitjam
  • 作品紹介 http://labs.kuru2jam.com/ くるくる研究室
  • 科学?!
  • センサー大好き!
  • Flash Lite 4
  • くるくる研究室 ケータイ Flash で 物理演算をしてみた
  • ActionScript3 で開発 !
  • 重力計算をしてみる
  • 必要なプロパティ 重力加速度 (gravity) 跳ね返り系数 (bounce) 速度 (vy)
  • 計算の手順
    • 現在の速度に重力加速度を足す
    • 今の座標に速度を足す
    • 跳ね返る処理
    • この手順を EnterFrame に書くだけ!
  • 速度 重力加速度 速度 重力加速度
  • 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; } }
  • デモ
  • タップの判定
  • タッチイベント this . addEventListener ( TouchEvent.TOUCH_TAP , onTouchTap); function onTouchTap(e: TouchEvent ){ addBall(e. stageX ,e. stageY ); }
  • デモ
  • DeciceCentral CS5 新機能
  • 振れます。
  • デモ
  • 加速度の取得
  • さようなら fscommand2
  • Accelerometer クラス
  • //Accelerometer オブジェクトを作成する var acc: Accelerometer = new Accelerometer (); // 端末が加速度センサを使えるかチェックする var isSupportedAcc: Boolean = Accelerometer.isSupported ; if (isSupportedAcc){ // 加速度の取得開始 acc. addEventListener ( AccelerometerEvent . UPDATE , _updateAccHandler); } function _updateAccHandler(e: AccelerometerEvent ){ // 加速度を取得した時の処理 ・・・ }
  • 「振る」動作の判定
  • // 以前かかった力 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; }
  • デモ
  • 衝突判定したい!
  • 計算がめんどい …
  • 帰りたい …
  • そうだ。 AS3 じゃないか!
  • AS3 神様、 力をお貸し下さい
  • Box2DFlashAS3 http://sourceforge.net/projects/box2dflash/
  • 設定の流れ
    • 重力を設定
    • シミュレーションの場 (world) を作成
    • 個々のオブジェクトを作成
    • シミュレーション実行
  • オブジェクトの作成
    • 形を設定
    • 性質を設定
    • 実体 (Body) を作成
    • Body とムービークリップを結びつける
    • Body をワールド内に生成する
    • Body に性質を適用
  • ( 実際のコードから抜粋 ) function initBox2d(){ // 重力設定 var gravity:b2Vec2 = new b2Vec2(0.0, 10.0); // ワールドを設定 _world = new b2World( gravity, true); // ボールを生成 addBall(120,40); // 更新 addEventListener ( Event . ENTER_FRAME , update); }
  • 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; ・ ・ ・ 続く
  • ( 続き ) // ボールのボディを設定 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); }
  • 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 ); } } }
  • デモ
  • その他の機能
  • マルチタッチ Multitouch . inputMode = MultitouchInputMode . GESTURE ; GPS Geolocation クラス ( AIR 限定 )
  • 実機テストしてね
  • おまけ FlashLite4 はできる子
  • ありがとうございました。