※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


FAVORITE BY
:
intensity box2d
:
:
:
:
sfxbox2dphysicsbatmanlove the sound effects! you should use a donburi (korokoro).
:
:
:
:
:
ちょうないす
:
:
:
:
Box2D動かしっぱなしにしていたら偶然、玉が詰まって画面中が「コロコロ…」だらけになって爆笑した。Box2Dが生み出した偶然の表現。
:
書体がかわいい
:
Box2d , Timer , Collision
:
警示文字特效
:
オノマトペあるだけで雰囲気だいぶ違う!
:
Box2Dあなたは大阪てら子26におきまして「うーわ、なんすかこれー!」賞を受賞しましたおめでとうございます。
:
:
:
Box2D
:
:
Box2DAS3衝突時擬音発生
:
Box2dの衝突時にオノマトペ
:
cuteonomatopoeiaphysicsCute! Japanese has so much more onomatopoeia than English. What would we say for コロコロ?
FORKED
  1. // forked from minon's おくれてきたおのまとぺ
  2. //ソース適当すぎるので見ないでぇぇ
  3. package{
  4.     
  5.     import Box2D.Dynamics.Contacts.*;
  6.     import flash.display.*;
  7.     import flash.events.*;
  8.     import flash.net.URLRequest;
  9.     import flash.utils.Timer;
  10.     import Box2D.Dynamics.*;
  11.     import Box2D.Collision.*;
  12.     import Box2D.Collision.Shapes.*;
  13.     import Box2D.Common.Math.*;
  14.     import net.hires.debug.Stats;
  15.     import flash.system.Security;
  16.     [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "0xFFFFFF")]
  17.     
  18.     public class Onomatopoeia extends Sprite{
  19.         
  20.         public static var DRAW_SCALE:int = 30;
  21.         
  22.         public var m_iterations:int = 10;
  23.         public var m_timeStep:Number = 1.0 / 30.0;
  24.         
  25.         private var _world:b2World;
  26.         private var _oLayer:Sprite = new Sprite();
  27.         private var _eLayer:Sprite = new Sprite();
  28.         private var _wLayer:Sprite = new Sprite();
  29.         
  30.         private var _loader:Loader = new Loader();
  31.         
  32.         public function Onomatopoeia(){
  33.                         Wonderfl.capture_delay( 20 );
  34.             Security.loadPolicyFile("http://labs.minomix.net/crossdomain.xml");  
  35.             _loader.contentLoaderInfo.addEventListener(Event.INIT, _loadInitHandler );
  36.             //_loader.load( new URLRequest("../material/gion2.png") );
  37.             _loader.load( new URLRequest("http://labs.minomix.net/img/gion.png") );
  38.             
  39.         }
  40.         
  41.         private function _loadInitHandler(e:Event):void {
  42.             
  43.             var tmp:BitmapData = new BitmapData( _loader.width, _loader.height, true0 );
  44.             tmp.draw( _loader );
  45.             
  46.             CreateEffect.init( tmp );
  47.             _init();
  48.             
  49.         }
  50.         
  51.         private function _init():void {
  52.             
  53.             this.addChild( _wLayer );
  54.             this.addChild( _oLayer );
  55.             this.addChild( _eLayer );
  56.             _oLayer.visible = false;
  57.             _wLayer.visible = false;
  58.             
  59.             // Add event for main loop
  60.             addEventListener(Event.ENTER_FRAME, Update, false0true);
  61.             
  62.             // Creat world AABB
  63.             var worldAABB:b2AABB = new b2AABB();
  64.             worldAABB.lowerBound.Set(-100, -100);
  65.             worldAABB.upperBound.Set(465+100465+100);
  66.             
  67.             // Define the gravity vector
  68.             var gravity:b2Vec2 = new b2Vec2(0.010.0);
  69.             
  70.             // Allow bodies to sleep
  71.             var doSleep:Boolean = true;
  72.             
  73.             // Construct a world object
  74.             _world = new b2World(worldAABB, gravity, doSleep);
  75.             
  76.             _createWall( 0465 / 2504650 );
  77.             _createWall( 465465 / 2504650 );
  78.             _createWall( 465 / 2120300100 );
  79.             _createWall( 465 / 2 + 7021046510, -8 );
  80.             _createWall( 465 / 2 - 70330465105 );
  81.             _createWall( 465 / 2 + 7044046510, -5 );
  82.             
  83.             //衝突判定のリスナをセットする
  84.             _world.SetContactListener( new ContactListener( _eLayer ) );
  85.             
  86.             var t:Timer = new Timer( 1000 );
  87.             t.addEventListener( TimerEvent.TIMER, _createBody );
  88.             t.start();
  89.             
  90.             //debug();
  91.             
  92.             stage.addEventListener(MouseEvent.CLICK, _clickHandler );
  93.             
  94.         }
  95.         
  96.         private function _clickHandler(e:Event):void {
  97.             _oLayer.visible = !_oLayer.visible;
  98.             _wLayer.visible = !_wLayer.visible;
  99.         }
  100.         
  101.         private function _createWall( x:int, y:int, w:int, h:int, r:int ):void {
  102.             
  103.             // Vars used to create bodies
  104.             var body:b2Body;
  105.             var bodyDef:b2BodyDef;
  106.             var boxDef:b2PolygonDef;
  107.             
  108.             // Add ground body
  109.             bodyDef = new b2BodyDef();
  110.             
  111.             bodyDef.position.Set(x / DRAW_SCALE, y / DRAW_SCALE);
  112.             bodyDef.angle = r / (180 / Math.PI);
  113.             
  114.             boxDef = new b2PolygonDef();
  115.             boxDef.SetAsBox(w / 2 / DRAW_SCALE, h / 2 / DRAW_SCALE);
  116.             
  117.             boxDef.friction = 0.3;
  118.             boxDef.density = 0// static bodies require zero density
  119.             
  120.             // Add sprite to body userData
  121.             bodyDef.userData = new PhysBox();
  122.             bodyDef.userData.width = w;
  123.             bodyDef.userData.height = h; 
  124.             bodyDef.userData.x = x;
  125.             bodyDef.userData.y = y;
  126.             bodyDef.userData.rotation = r;
  127.             _wLayer.addChild(bodyDef.userData);
  128.             body = _world.CreateBody(bodyDef);
  129.             body.CreateShape(boxDef);
  130.             
  131.             body.SetMassFromShapes();
  132.             
  133.         }
  134.         
  135.         private function _createBody( e:TimerEvent ):void {
  136.             
  137.             var bodyDef:b2BodyDef;
  138.             var circleDef:b2CircleDef;
  139.             var body:b2Body;
  140.             
  141.             bodyDef = new b2BodyDef();
  142.             bodyDef.position.x = ( Math.random() * 265 + 100 ) / 30 ;
  143.             bodyDef.position.y = 0;
  144.             var rX:Number = Math.random()/4 + 0.3;
  145.             var rY:Number = Math.random()/4 + 0.3;
  146.             
  147.             // Circle
  148.             circleDef = new b2CircleDef();
  149.             circleDef.radius = rX;
  150.             circleDef.density = 1.0;
  151.             circleDef.friction = 0.4;
  152.             circleDef.restitution = 0.5
  153.             
  154.             bodyDef.userData = new PhysCircle();
  155.             bodyDef.userData.width = rX * 2 * DRAW_SCALE;
  156.             bodyDef.userData.height = rX * 2 * DRAW_SCALE;
  157.             
  158.             body = _world.CreateBody(bodyDef);
  159.             body.CreateShape(circleDef);
  160.             
  161.             body.SetMassFromShapes();
  162.             _oLayer.addChild(bodyDef.userData);
  163.             
  164.         }
  165.         
  166.         public function debug():void {
  167.             
  168.             // set debug draw
  169.             var dbgDraw:b2DebugDraw = new b2DebugDraw();
  170.             var dbgSprite:Sprite = new Sprite();
  171.             addChild(dbgSprite);
  172.             dbgDraw.m_sprite = dbgSprite;
  173.             dbgDraw.m_drawScale = 30.0;
  174.             dbgDraw.m_fillAlpha = 0.0;
  175.             dbgDraw.m_lineThickness = 0;
  176.             dbgDraw.m_drawFlags = 0xFFFFFFFF;
  177.             _world.SetDebugDraw(dbgDraw);
  178.             
  179.         }
  180.         
  181.         
  182.         public function Update(e:Event):void{
  183.             
  184.             _world.Step(m_timeStep, m_iterations);
  185.             
  186.             
  187.             //表示周りの更新
  188.             for (var bb:b2Body = _world.m_bodyList; bb; bb = bb.m_next) {
  189.                 
  190.                 //画面外に出たときの判定
  191.                 var bx:Number = bb.GetPosition().x * DRAW_SCALE;
  192.                 var by:Number = bb.GetPosition().y * DRAW_SCALE;
  193.                 if ( bx < -100 || bx > 465+100 || by < -100 ) {
  194.                     _oLayer.removeChild( bb.GetUserData() );
  195.                     _world.DestroyBody( bb );
  196.                     break;
  197.                 }
  198.                 
  199.                 if (bb.m_userData is Sprite){
  200.                     bb.m_userData.x = bb.GetPosition().x * DRAW_SCALE;
  201.                     bb.m_userData.y = bb.GetPosition().y * DRAW_SCALE;
  202.                     bb.m_userData.rotation = bb.GetAngle() * (180 / Math.PI);
  203.                 }
  204.                 
  205.             }
  206.             
  207.         }
  208.         
  209.     }
  210.     
  211. }
  212. import Box2D.Collision.b2ContactPoint;
  213. import Box2D.Collision.Shapes.b2Shape;
  214. import Box2D.Dynamics.b2ContactListener;
  215. import flash.display.*;
  216. import flash.geom.*;
  217. import flash.text.*;
  218. import org.libspark.betweenas3.BetweenAS3;
  219. import org.libspark.betweenas3.easing.Quad;
  220. import org.libspark.betweenas3.events.TweenEvent;
  221. import org.libspark.betweenas3.tweens.ITween;
  222. class PhysBox extends Sprite {
  223.     
  224.     public var count:int = 0;
  225.     
  226.     public function PhysBox() {
  227.         this.graphics.beginFill( 0x999999 );
  228.         this.graphics.drawRect( -50, -50100100 );
  229.         this.graphics.endFill();
  230.     }
  231. }
  232. class PhysCircle extends Sprite {
  233.     
  234.     public var count:int = 0;
  235.     
  236.     public function PhysCircle() {
  237.         this.graphics.beginFill( 0x999999 );
  238.         this.graphics.drawCircle(00100 );
  239.         this.graphics.endFill();
  240.     }
  241. }
  242. class CreateEffect extends Sprite {
  243.     
  244.     public static var _images:Vector.<BitmapData> = new Vector.<BitmapData>;
  245.     
  246.     public static function init( b:BitmapData ):void {
  247.         
  248.         for ( var i:int = 0 ; i < 5 ; i++ ) {
  249.             
  250.             var img:BitmapData = new BitmapData(120120true, 0x0 );
  251.             img.copyPixels( b, new Rectangle( 120*i, 0120120 ), new Point( 00 ), nullnulltrue );
  252.             
  253.             _images.push( img );
  254.             
  255.         }
  256.         
  257.     }
  258.     
  259.     public function CreateEffect( px:Number, py:Number, f:Number ) {
  260.         
  261.         var b:Bitmap;
  262.         if ( f > 7.5 )        b = Bitmap( addChild( new Bitmap( _images[0] ) ) );
  263.         else if ( f > 6 )    b = Bitmap( addChild( new Bitmap( _images[1] ) ) );
  264.         else if ( f > 3 )    b = Bitmap( addChild( new Bitmap( _images[2] ) ) );
  265.         else if ( f > 0 )    b = Bitmap( addChild( new Bitmap( _images[3] ) ) );
  266.         else                { b = Bitmap( addChild( new Bitmap( _images[4] ) ) ); f = 3; }
  267.         
  268.         this.x = px
  269.         b.x = -b.width/2;
  270.         this.y = py
  271.         b.y = -b.height/2;
  272.         this.rotation = Math.random() * 90 - 45;
  273.         
  274.         var bt:ITween = BetweenAS3.tween( this, { alpha:0, scaleX:0.5, scaleY:0.5 }, null0.4, Quad.easeIn );
  275.         bt.addEventListener( TweenEvent.COMPLETE, _complete );
  276.         bt.play();
  277.         
  278.     }
  279.     
  280.     private function _complete(e:TweenEvent):void {
  281.         this.parent.removeChild( this );
  282.     }
  283.     
  284. }
  285. class ContactListener extends b2ContactListener {
  286.     
  287.     private var _root:Sprite;
  288.     
  289.     public function ContactListener( root:Sprite ) {
  290.         _root = root;
  291.     }
  292.     
  293.     public override function Add(point:b2ContactPoint):void {
  294.         
  295.         var f:Number = point.shape1.GetBody().m_linearVelocity.Length() + point.shape2.GetBody().m_linearVelocity.Length();
  296.         
  297.         //trace("ガン!", f/*, point.position.x, point.position.y*/ );
  298.         if ( f > 3 ) {
  299.             _root.addChild( new CreateEffect( point.position.x * Onomatopoeia.DRAW_SCALE, point.position.y * Onomatopoeia.DRAW_SCALE, f ) );
  300.         }
  301.         
  302.     }
  303.     
  304.     public override function Persist( point:b2ContactPoint ):void {
  305.         
  306.         var shape:b2Shape;
  307.         
  308.         if ( point.shape1.m_density == 0 && point.shape2.m_density == 1 ) shape = point.shape2;
  309.         else if ( point.shape1.m_density == 1 && point.shape2.m_density == 0 ) shape = point.shape1;
  310.         else return;
  311.         
  312.         shape.GetBody().GetUserData().count += Math.ceil( shape.GetBody().m_linearVelocity.Length() );
  313.         
  314.         if ( shape.GetBody().GetUserData().count > 0 ) {
  315.             _root.addChild( new CreateEffect( point.position.x * Onomatopoeia.DRAW_SCALE, point.position.y * Onomatopoeia.DRAW_SCALE, -1 ) );
  316.             shape.GetBody().GetUserData().count = -20;
  317.         }
  318.         
  319.     }
  320.     
  321.     public override function Remove(point:b2ContactPoint):void {
  322.         
  323.         point.shape1.GetBody().m_userData.count = -5;
  324.         point.shape2.GetBody().m_userData.count = -5;
  325.         
  326.     }
  327.     
  328. }
noswf
  1. // forked from minon's おくれてきたおのまとぺ
  2. //ソース適当すぎるので見ないでぇぇ
  3. package{
  4.     
  5.     import Box2D.Dynamics.Contacts.*;
  6.     import flash.display.*;
  7.     import flash.events.*;
  8.     import flash.net.URLRequest;
  9.     import flash.utils.Timer;
  10.     import Box2D.Dynamics.*;
  11.     import Box2D.Collision.*;
  12.     import Box2D.Collision.Shapes.*;
  13.     import Box2D.Common.Math.*;
  14.     import net.hires.debug.Stats;
  15.     import flash.system.Security;
  16.     [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "0xFFFFFF")]
  17.     
  18.     public class Onomatopoeia extends Sprite{
  19.         
  20.         public static var DRAW_SCALE:int = 30;
  21.         
  22.         public var m_iterations:int = 10;
  23.         public var m_timeStep:Number = 1.0 / 30.0;
  24.         
  25.         private var _world:b2World;
  26.         private var _oLayer:Sprite = new Sprite();
  27.         private var _eLayer:Sprite = new Sprite();
  28.         private var _wLayer:Sprite = new Sprite();
  29.         
  30.         private var _loader:Loader = new Loader();
  31.         
  32.         public function Onomatopoeia(){
  33.                         Wonderfl.capture_delay( 20 );
  34.             Security.loadPolicyFile("http://labs.minomix.net/crossdomain.xml");  
  35.             _loader.contentLoaderInfo.addEventListener(Event.INIT, _loadInitHandler );
  36.             //_loader.load( new URLRequest("../material/gion2.png") );
  37.             _loader.load( new URLRequest("http://labs.minomix.net/img/gion.png") );
  38.             
  39.         }
  40.         
  41.         private function _loadInitHandler(e:Event):void {
  42.             
  43.             var tmp:BitmapData = new BitmapData( _loader.width, _loader.height, true0 );
  44.             tmp.draw( _loader );
  45.             
  46.             CreateEffect.init( tmp );
  47.             _init();
  48.             
  49.         }
  50.         
  51.         private function _init():void {
  52.             
  53.             this.addChild( _wLayer );
  54.             this.addChild( _oLayer );
  55.             this.addChild( _eLayer );
  56.             _oLayer.visible = false;
  57.             _wLayer.visible = false;
  58.             
  59.             // Add event for main loop
  60.             addEventListener(Event.ENTER_FRAME, Update, false0true);
  61.             
  62.             // Creat world AABB
  63.             var worldAABB:b2AABB = new b2AABB();
  64.             worldAABB.lowerBound.Set(-100, -100);
  65.             worldAABB.upperBound.Set(465+100465+100);
  66.             
  67.             // Define the gravity vector
  68.             var gravity:b2Vec2 = new b2Vec2(0.010.0);
  69.             
  70.             // Allow bodies to sleep
  71.             var doSleep:Boolean = true;
  72.             
  73.             // Construct a world object
  74.             _world = new b2World(worldAABB, gravity, doSleep);
  75.             
  76.             _createWall( 0465 / 2504650 );
  77.             _createWall( 465465 / 2504650 );
  78.             _createWall( 465 / 2120300100 );
  79.             _createWall( 465 / 2 + 7021046510, -8 );
  80.             _createWall( 465 / 2 - 70330465105 );
  81.             _createWall( 465 / 2 + 7044046510, -5 );
  82.             
  83.             //衝突判定のリスナをセットする
  84.             _world.SetContactListener( new ContactListener( _eLayer ) );
  85.             
  86.             var t:Timer = new Timer( 1000 );
  87.             t.addEventListener( TimerEvent.TIMER, _createBody );
  88.             t.start();
  89.             
  90.             //debug();
  91.             
  92.             stage.addEventListener(MouseEvent.CLICK, _clickHandler );
  93.             
  94.         }
  95.         
  96.         private function _clickHandler(e:Event):void {
  97.             _oLayer.visible = !_oLayer.visible;
  98.             _wLayer.visible = !_wLayer.visible;
  99.         }
  100.         
  101.         private function _createWall( x:int, y:int, w:int, h:int, r:int ):void {
  102.             
  103.             // Vars used to create bodies
  104.             var body:b2Body;
  105.             var bodyDef:b2BodyDef;
  106.             var boxDef:b2PolygonDef;
  107.             
  108.             // Add ground body
  109.             bodyDef = new b2BodyDef();
  110.             
  111.             bodyDef.position.Set(x / DRAW_SCALE, y / DRAW_SCALE);
  112.             bodyDef.angle = r / (180 / Math.PI);
  113.             
  114.             boxDef = new b2PolygonDef();
  115.             boxDef.SetAsBox(w / 2 / DRAW_SCALE, h / 2 / DRAW_SCALE);
  116.             
  117.             boxDef.friction = 0.3;
  118.             boxDef.density = 0// static bodies require zero density
  119.             
  120.             // Add sprite to body userData
  121.             bodyDef.userData = new PhysBox();
  122.             bodyDef.userData.width = w;
  123.             bodyDef.userData.height = h; 
  124.             bodyDef.userData.x = x;
  125.             bodyDef.userData.y = y;
  126.             bodyDef.userData.rotation = r;
  127.             _wLayer.addChild(bodyDef.userData);
  128.             body = _world.CreateBody(bodyDef);
  129.             body.CreateShape(boxDef);
  130.             
  131.             body.SetMassFromShapes();
  132.             
  133.         }
  134.         
  135.         private function _createBody( e:TimerEvent ):void {
  136.             
  137.             var bodyDef:b2BodyDef;
  138.             var circleDef:b2CircleDef;
  139.             var body:b2Body;
  140.             
  141.             bodyDef = new b2BodyDef();
  142.             bodyDef.position.x = ( Math.random() * 265 + 100 ) / 30 ;
  143.             bodyDef.position.y = 0;
  144.             var rX:Number = Math.random()/4 + 0.3;
  145.             var rY:Number = Math.random()/4 + 0.3;
  146.             
  147.             // Circle
  148.             circleDef = new b2CircleDef();
  149.             circleDef.radius = rX;
  150.             circleDef.density = 1.0;
  151.             circleDef.friction = 0.4;
  152.             circleDef.restitution = 0.5
  153.             
  154.             bodyDef.userData = new PhysCircle();
  155.             bodyDef.userData.width = rX * 2 * DRAW_SCALE;
  156.             bodyDef.userData.height = rX * 2 * DRAW_SCALE;
  157.             
  158.             body = _world.CreateBody(bodyDef);
  159.             body.CreateShape(circleDef);
  160.             
  161.             body.SetMassFromShapes();
  162.             _oLayer.addChild(bodyDef.userData);
  163.             
  164.         }
  165.         
  166.         public function debug():void {
  167.             
  168.             // set debug draw
  169.             var dbgDraw:b2DebugDraw = new b2DebugDraw();
  170.             var dbgSprite:Sprite = new Sprite();
  171.             addChild(dbgSprite);
  172.             dbgDraw.m_sprite = dbgSprite;
  173.             dbgDraw.m_drawScale = 30.0;
  174.             dbgDraw.m_fillAlpha = 0.0;
  175.             dbgDraw.m_lineThickness = 0;
  176.             dbgDraw.m_drawFlags = 0xFFFFFFFF;
  177.             _world.SetDebugDraw(dbgDraw);
  178.             
  179.         }
  180.         
  181.         
  182.         public function Update(e:Event):void{
  183.             
  184.             _world.Step(m_timeStep, m_iterations);
  185.             
  186.             
  187.             //表示周りの更新
  188.             for (var bb:b2Body = _world.m_bodyList; bb; bb = bb.m_next) {
  189.                 
  190.                 //画面外に出たときの判定
  191.                 var bx:Number = bb.GetPosition().x * DRAW_SCALE;
  192.                 var by:Number = bb.GetPosition().y * DRAW_SCALE;
  193.                 if ( bx < -100 || bx > 465+100 || by < -100 ) {
  194.                     _oLayer.removeChild( bb.GetUserData() );
  195.                     _world.DestroyBody( bb );
  196.                     break;
  197.                 }
  198.                 
  199.                 if (bb.m_userData is Sprite){
  200.                     bb.m_userData.x = bb.GetPosition().x * DRAW_SCALE;
  201.                     bb.m_userData.y = bb.GetPosition().y * DRAW_SCALE;
  202.                     bb.m_userData.rotation = bb.GetAngle() * (180 / Math.PI);
  203.                 }
  204.                 
  205.             }
  206.             
  207.         }
  208.         
  209.     }
  210.     
  211. }
  212. import Box2D.Collision.b2ContactPoint;
  213. import Box2D.Collision.Shapes.b2Shape;
  214. import Box2D.Dynamics.b2ContactListener;
  215. import flash.display.*;
  216. import flash.geom.*;
  217. import flash.text.*;
  218. import org.libspark.betweenas3.BetweenAS3;
  219. import org.libspark.betweenas3.easing.Quad;
  220. import org.libspark.betweenas3.events.TweenEvent;
  221. import org.libspark.betweenas3.tweens.ITween;
  222. class PhysBox extends Sprite {
  223.     
  224.     public var count:int = 0;
  225.     
  226.     public function PhysBox() {
  227.         this.graphics.beginFill( 0x999999 );
  228.         this.graphics.drawRect( -50, -50100100 );
  229.         this.graphics.endFill();
  230.     }
  231. }
  232. class PhysCircle extends Sprite {
  233.     
  234.     public var count:int = 0;
  235.     
  236.     public function PhysCircle() {
  237.         this.graphics.beginFill( 0x999999 );
  238.         this.graphics.drawCircle(00100 );
  239.         this.graphics.endFill();
  240.     }
  241. }
  242. class CreateEffect extends Sprite {
  243.     
  244.     public static var _images:Vector.<BitmapData> = new Vector.<BitmapData>;
  245.     
  246.     public static function init( b:BitmapData ):void {
  247.         
  248.         for ( var i:int = 0 ; i < 5 ; i++ ) {
  249.             
  250.             var img:BitmapData = new BitmapData(120120true, 0x0 );
  251.             img.copyPixels( b, new Rectangle( 120*i, 0120120 ), new Point( 00 ), nullnulltrue );
  252.             
  253.             _images.push( img );
  254.             
  255.         }
  256.         
  257.     }
  258.     
  259.     public function CreateEffect( px:Number, py:Number, f:Number ) {
  260.         
  261.         var b:Bitmap;
  262.         if ( f > 7.5 )        b = Bitmap( addChild( new Bitmap( _images[0] ) ) );
  263.         else if ( f > 6 )    b = Bitmap( addChild( new Bitmap( _images[1] ) ) );
  264.         else if ( f > 3 )    b = Bitmap( addChild( new Bitmap( _images[2] ) ) );
  265.         else if ( f > 0 )    b = Bitmap( addChild( new Bitmap( _images[3] ) ) );
  266.         else                { b = Bitmap( addChild( new Bitmap( _images[4] ) ) ); f = 3; }
  267.         
  268.         this.x = px
  269.         b.x = -b.width/2;
  270.         this.y = py
  271.         b.y = -b.height/2;
  272.         this.rotation = Math.random() * 90 - 45;
  273.         
  274.         var bt:ITween = BetweenAS3.tween( this, { alpha:0, scaleX:0.5, scaleY:0.5 }, null0.4, Quad.easeIn );
  275.         bt.addEventListener( TweenEvent.COMPLETE, _complete );
  276.         bt.play();
  277.         
  278.     }
  279.     
  280.     private function _complete(e:TweenEvent):void {
  281.         this.parent.removeChild( this );
  282.     }
  283.     
  284. }
  285. class ContactListener extends b2ContactListener {
  286.     
  287.     private var _root:Sprite;
  288.     
  289.     public function ContactListener( root:Sprite ) {
  290.         _root = root;
  291.     }
  292.     
  293.     public override function Add(point:b2ContactPoint):void {
  294.         
  295.         var f:Number = point.shape1.GetBody().m_linearVelocity.Length() + point.shape2.GetBody().m_linearVelocity.Length();
  296.         
  297.         //trace("ガン!", f/*, point.position.x, point.position.y*/ );
  298.         if ( f > 3 ) {
  299.             _root.addChild( new CreateEffect( point.position.x * Onomatopoeia.DRAW_SCALE, point.position.y * Onomatopoeia.DRAW_SCALE, f ) );
  300.         }
  301.         
  302.     }
  303.     
  304.     public override function Persist( point:b2ContactPoint ):void {
  305.         
  306.         var shape:b2Shape;
  307.         
  308.         if ( point.shape1.m_density == 0 && point.shape2.m_density == 1 ) shape = point.shape2;
  309.         else if ( point.shape1.m_density == 1 && point.shape2.m_density == 0 ) shape = point.shape1;
  310.         else return;
  311.         
  312.         shape.GetBody().GetUserData().count += Math.ceil( shape.GetBody().m_linearVelocity.Length() );
  313.         
  314.         if ( shape.GetBody().GetUserData().count > 0 ) {
  315.             _root.addChild( new CreateEffect( point.position.x * Onomatopoeia.DRAW_SCALE, point.position.y * Onomatopoeia.DRAW_SCALE, -1 ) );
  316.             shape.GetBody().GetUserData().count = -20;
  317.         }
  318.         
  319.     }
  320.     
  321.     public override function Remove(point:b2ContactPoint):void {
  322.         
  323.         point.shape1.GetBody().m_userData.count = -5;
  324.         point.shape2.GetBody().m_userData.count = -5;
  325.         
  326.     }
  327.     
  328. }
noswf
  1. // forked from minon's おくれてきたおのまとぺ
  2. //ソース適当すぎるので見ないでぇぇ
  3. package{
  4.     
  5.     import Box2D.Dynamics.Contacts.*;
  6.     import flash.display.*;
  7.     import flash.events.*;
  8.     import flash.net.URLRequest;
  9.     import flash.utils.Timer;
  10.     import Box2D.Dynamics.*;
  11.     import Box2D.Collision.*;
  12.     import Box2D.Collision.Shapes.*;
  13.     import Box2D.Common.Math.*;
  14.     import net.hires.debug.Stats;
  15.     import flash.system.Security;
  16.     [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "0xFFFFFF")]
  17.     
  18.     public class Onomatopoeia extends Sprite{
  19.         
  20.         public static var DRAW_SCALE:int = 30;
  21.         
  22.         public var m_iterations:int = 10;
  23.         public var m_timeStep:Number = 1.0 / 30.0;
  24.         
  25.         private var _world:b2World;
  26.         private var _oLayer:Sprite = new Sprite();
  27.         private var _eLayer:Sprite = new Sprite();
  28.         private var _wLayer:Sprite = new Sprite();
  29.         
  30.         private var _loader:Loader = new Loader();
  31.         
  32.         public function Onomatopoeia(){
  33.                         Wonderfl.capture_delay( 20 );
  34.             Security.loadPolicyFile("http://labs.minomix.net/crossdomain.xml");  
  35.             _loader.contentLoaderInfo.addEventListener(Event.INIT, _loadInitHandler );
  36.             //_loader.load( new URLRequest("../material/gion2.png") );
  37.             _loader.load( new URLRequest("http://labs.minomix.net/img/gion.png") );
  38.             
  39.         }
  40.         
  41.         private function _loadInitHandler(e:Event):void {
  42.             
  43.             var tmp:BitmapData = new BitmapData( _loader.width, _loader.height, true0 );
  44.             tmp.draw( _loader );
  45.             
  46.             CreateEffect.init( tmp );
  47.             _init();
  48.             
  49.         }
  50.         
  51.         private function _init():void {
  52.             
  53.             this.addChild( _wLayer );
  54.             this.addChild( _oLayer );
  55.             this.addChild( _eLayer );
  56.             _oLayer.visible = false;
  57.             _wLayer.visible = false;
  58.             
  59.             // Add event for main loop
  60.             addEventListener(Event.ENTER_FRAME, Update, false0true);
  61.             
  62.             // Creat world AABB
  63.             var worldAABB:b2AABB = new b2AABB();
  64.             worldAABB.lowerBound.Set(-100, -100);
  65.             worldAABB.upperBound.Set(465+100465+100);
  66.             
  67.             // Define the gravity vector
  68.             var gravity:b2Vec2 = new b2Vec2(0.010.0);
  69.             
  70.             // Allow bodies to sleep
  71.             var doSleep:Boolean = true;
  72.             
  73.             // Construct a world object
  74.             _world = new b2World(worldAABB, gravity, doSleep);
  75.             
  76.             _createWall( 0465 / 2504650 );
  77.             _createWall( 465465 / 2504650 );
  78.             _createWall( 465 / 2120300100 );
  79.             _createWall( 465 / 2 + 7021046510, -8 );
  80.             _createWall( 465 / 2 - 70330465105 );
  81.             _createWall( 465 / 2 + 7044046510, -5 );
  82.             
  83.             //衝突判定のリスナをセットする
  84.             _world.SetContactListener( new ContactListener( _eLayer ) );
  85.             
  86.             var t:Timer = new Timer( 1000 );
  87.             t.addEventListener( TimerEvent.TIMER, _createBody );
  88.             t.start();
  89.             
  90.             //debug();
  91.             
  92.             stage.addEventListener(MouseEvent.CLICK, _clickHandler );
  93.             
  94.         }
  95.         
  96.         private function _clickHandler(e:Event):void {
  97.             _oLayer.visible = !_oLayer.visible;
  98.             _wLayer.visible = !_wLayer.visible;
  99.         }
  100.         
  101.         private function _createWall( x:int, y:int, w:int, h:int, r:int ):void {
  102.             
  103.             // Vars used to create bodies
  104.             var body:b2Body;
  105.             var bodyDef:b2BodyDef;
  106.             var boxDef:b2PolygonDef;
  107.             
  108.             // Add ground body
  109.             bodyDef = new b2BodyDef();
  110.             
  111.             bodyDef.position.Set(x / DRAW_SCALE, y / DRAW_SCALE);
  112.             bodyDef.angle = r / (180 / Math.PI);
  113.             
  114.             boxDef = new b2PolygonDef();
  115.             boxDef.SetAsBox(w / 2 / DRAW_SCALE, h / 2 / DRAW_SCALE);
  116.             
  117.             boxDef.friction = 0.3;
  118.             boxDef.density = 0// static bodies require zero density
  119.             
  120.             // Add sprite to body userData
  121.             bodyDef.userData = new PhysBox();
  122.             bodyDef.userData.width = w;
  123.             bodyDef.userData.height = h; 
  124.             bodyDef.userData.x = x;
  125.             bodyDef.userData.y = y;
  126.             bodyDef.userData.rotation = r;
  127.             _wLayer.addChild(bodyDef.userData);
  128.             body = _world.CreateBody(bodyDef);
  129.             body.CreateShape(boxDef);
  130.             
  131.             body.SetMassFromShapes();
  132.             
  133.         }
  134.         
  135.         private function _createBody( e:TimerEvent ):void {
  136.             
  137.             var bodyDef:b2BodyDef;
  138.             var circleDef:b2CircleDef;
  139.             var body:b2Body;
  140.             
  141.             bodyDef = new b2BodyDef();
  142.             bodyDef.position.x = ( Math.random() * 265 + 100 ) / 30 ;
  143.             bodyDef.position.y = 0;
  144.             var rX:Number = Math.random()/4 + 0.3;
  145.             var rY:Number = Math.random()/4 + 0.3;
  146.             
  147.             // Circle
  148.             circleDef = new b2CircleDef();
  149.             circleDef.radius = rX;
  150.             circleDef.density = 1.0;
  151.             circleDef.friction = 0.4;
  152.             circleDef.restitution = 0.5
  153.             
  154.             bodyDef.userData = new PhysCircle();
  155.             bodyDef.userData.width = rX * 2 * DRAW_SCALE;
  156.             bodyDef.userData.height = rX * 2 * DRAW_SCALE;
  157.             
  158.             body = _world.CreateBody(bodyDef);
  159.             body.CreateShape(circleDef);
  160.             
  161.             body.SetMassFromShapes();
  162.             _oLayer.addChild(bodyDef.userData);
  163.             
  164.         }
  165.         
  166.         public function debug():void {
  167.             
  168.             // set debug draw
  169.             var dbgDraw:b2DebugDraw = new b2DebugDraw();
  170.             var dbgSprite:Sprite = new Sprite();
  171.             addChild(dbgSprite);
  172.             dbgDraw.m_sprite = dbgSprite;
  173.             dbgDraw.m_drawScale = 30.0;
  174.             dbgDraw.m_fillAlpha = 0.0;
  175.             dbgDraw.m_lineThickness = 0;
  176.             dbgDraw.m_drawFlags = 0xFFFFFFFF;
  177.             _world.SetDebugDraw(dbgDraw);
  178.             
  179.         }
  180.         
  181.         
  182.         public function Update(e:Event):void{
  183.             
  184.             _world.Step(m_timeStep, m_iterations);
  185.             
  186.             
  187.             //表示周りの更新
  188.             for (var bb:b2Body = _world.m_bodyList; bb; bb = bb.m_next) {
  189.                 
  190.                 //画面外に出たときの判定
  191.                 var bx:Number = bb.GetPosition().x * DRAW_SCALE;
  192.                 var by:Number = bb.GetPosition().y * DRAW_SCALE;
  193.                 if ( bx < -100 || bx > 465+100 || by < -100 ) {
  194.                     _oLayer.removeChild( bb.GetUserData() );
  195.                     _world.DestroyBody( bb );
  196.                     break;
  197.                 }
  198.                 
  199.                 if (bb.m_userData is Sprite){
  200.                     bb.m_userData.x = bb.GetPosition().x * DRAW_SCALE;
  201.                     bb.m_userData.y = bb.GetPosition().y * DRAW_SCALE;
  202.                     bb.m_userData.rotation = bb.GetAngle() * (180 / Math.PI);
  203.                 }
  204.                 
  205.             }
  206.             
  207.         }
  208.         
  209.     }
  210.     
  211. }
  212. import Box2D.Collision.b2ContactPoint;
  213. import Box2D.Collision.Shapes.b2Shape;
  214. import Box2D.Dynamics.b2ContactListener;
  215. import flash.display.*;
  216. import flash.geom.*;
  217. import flash.text.*;
  218. import org.libspark.betweenas3.BetweenAS3;
  219. import org.libspark.betweenas3.easing.Quad;
  220. import org.libspark.betweenas3.events.TweenEvent;
  221. import org.libspark.betweenas3.tweens.ITween;
  222. class PhysBox extends Sprite {
  223.     
  224.     public var count:int = 0;
  225.     
  226.     public function PhysBox() {
  227.         this.graphics.beginFill( 0x999999 );
  228.         this.graphics.drawRect( -50, -50100100 );
  229.         this.graphics.endFill();
  230.     }
  231. }
  232. class PhysCircle extends Sprite {
  233.     
  234.     public var count:int = 0;
  235.     
  236.     public function PhysCircle() {
  237.         this.graphics.beginFill( 0x999999 );
  238.         this.graphics.drawCircle(00100 );
  239.         this.graphics.endFill();
  240.     }
  241. }
  242. class CreateEffect extends Sprite {
  243.     
  244.     public static var _images:Vector.<BitmapData> = new Vector.<BitmapData>;
  245.     
  246.     public static function init( b:BitmapData ):void {
  247.         
  248.         for ( var i:int = 0 ; i < 5 ; i++ ) {
  249.             
  250.             var img:BitmapData = new BitmapData(120120true, 0x0 );
  251.             img.copyPixels( b, new Rectangle( 120*i, 0120120 ), new Point( 00 ), nullnulltrue );
  252.             
  253.             _images.push( img );
  254.             
  255.         }
  256.         
  257.     }
  258.     
  259.     public function CreateEffect( px:Number, py:Number, f:Number ) {
  260.         
  261.         var b:Bitmap;
  262.         if ( f > 7.5 )        b = Bitmap( addChild( new Bitmap( _images[0] ) ) );
  263.         else if ( f > 6 )    b = Bitmap( addChild( new Bitmap( _images[1] ) ) );
  264.         else if ( f > 3 )    b = Bitmap( addChild( new Bitmap( _images[2] ) ) );
  265.         else if ( f > 0 )    b = Bitmap( addChild( new Bitmap( _images[3] ) ) );
  266.         else                { b = Bitmap( addChild( new Bitmap( _images[4] ) ) ); f = 3; }
  267.         
  268.         this.x = px
  269.         b.x = -b.width/2;
  270.         this.y = py
  271.         b.y = -b.height/2;
  272.         this.rotation = Math.random() * 90 - 45;
  273.         
  274.         var bt:ITween = BetweenAS3.tween( this, { alpha:0, scaleX:0.5, scaleY:0.5 }, null0.4, Quad.easeIn );
  275.         bt.addEventListener( TweenEvent.COMPLETE, _complete );
  276.         bt.play();
  277.         
  278.     }
  279.     
  280.     private function _complete(e:TweenEvent):void {
  281.         this.parent.removeChild( this );
  282.     }
  283.     
  284. }
  285. class ContactListener extends b2ContactListener {
  286.     
  287.     private var _root:Sprite;
  288.     
  289.     public function ContactListener( root:Sprite ) {
  290.         _root = root;
  291.     }
  292.     
  293.     public override function Add(point:b2ContactPoint):void {
  294.         
  295.         var f:Number = point.shape1.GetBody().m_linearVelocity.Length() + point.shape2.GetBody().m_linearVelocity.Length();
  296.         
  297.         //trace("ガン!", f/*, point.position.x, point.position.y*/ );
  298.         if ( f > 3 ) {
  299.             _root.addChild( new CreateEffect( point.position.x * Onomatopoeia.DRAW_SCALE, point.position.y * Onomatopoeia.DRAW_SCALE, f ) );
  300.         }
  301.         
  302.     }
  303.     
  304.     public override function Persist( point:b2ContactPoint ):void {
  305.         
  306.         var shape:b2Shape;
  307.         
  308.         if ( point.shape1.m_density == 0 && point.shape2.m_density == 1 ) shape = point.shape2;
  309.         else if ( point.shape1.m_density == 1 && point.shape2.m_density == 0 ) shape = point.shape1;
  310.         else return;
  311.         
  312.         shape.GetBody().GetUserData().count += Math.ceil( shape.GetBody().m_linearVelocity.Length() );
  313.         
  314.         if ( shape.GetBody().GetUserData().count > 0 ) {
  315.             _root.addChild( new CreateEffect( point.position.x * Onomatopoeia.DRAW_SCALE, point.position.y * Onomatopoeia.DRAW_SCALE, -1 ) );
  316.             shape.GetBody().GetUserData().count = -20;
  317.         }
  318.         
  319.     }
  320.     
  321.     public override function Remove(point:b2ContactPoint):void {
  322.         
  323.         point.shape1.GetBody().m_userData.count = -5;
  324.         point.shape2.GetBody().m_userData.count = -5;
  325.         
  326.     }
  327.     
  328. }
noswf
  1. // forked from minon's おくれてきたおのまとぺ
  2. //ソース適当すぎるので見ないでぇぇ
  3. package{
  4.     
  5.     import Box2D.Dynamics.Contacts.*;
  6.     import flash.display.*;
  7.     import flash.events.*;
  8.     import flash.net.URLRequest;
  9.     import flash.utils.Timer;
  10.     import Box2D.Dynamics.*;
  11.     import Box2D.Collision.*;
  12.     import Box2D.Collision.Shapes.*;
  13.     import Box2D.Common.Math.*;
  14.     import net.hires.debug.Stats;
  15.     import flash.system.Security;
  16.     [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "0xFFFFFF")]
  17.     
  18.     public class Onomatopoeia extends Sprite{
  19.         
  20.         public static var DRAW_SCALE:int = 30;
  21.         
  22.         public var m_iterations:int = 10;
  23.         public var m_timeStep:Number = 1.0 / 30.0;
  24.         
  25.         private var _world:b2World;
  26.         private var _oLayer:Sprite = new Sprite();
  27.         private var _eLayer:Sprite = new Sprite();
  28.         private var _wLayer:Sprite = new Sprite();
  29.         
  30.         private var _loader:Loader = new Loader();
  31.         
  32.         public function Onomatopoeia(){
  33.                         Wonderfl.capture_delay( 20 );
  34.             Security.loadPolicyFile("http://labs.minomix.net/crossdomain.xml");  
  35.             _loader.contentLoaderInfo.addEventListener(Event.INIT, _loadInitHandler );
  36.             //_loader.load( new URLRequest("../material/gion2.png") );
  37.             _loader.load( new URLRequest("http://labs.minomix.net/img/gion.png") );
  38.             
  39.         }
  40.         
  41.         private function _loadInitHandler(e:Event):void {
  42.             
  43.             var tmp:BitmapData = new BitmapData( _loader.width, _loader.height, true0 );
  44.             tmp.draw( _loader );
  45.             
  46.             CreateEffect.init( tmp );
  47.             _init();
  48.             
  49.         }
  50.         
  51.         private function _init():void {
  52.             
  53.             this.addChild( _wLayer );
  54.             this.addChild( _oLayer );
  55.             this.addChild( _eLayer );
  56.             _oLayer.visible = false;
  57.             _wLayer.visible = false;
  58.             
  59.             // Add event for main loop
  60.             addEventListener(Event.ENTER_FRAME, Update, false0true);
  61.             
  62.             // Creat world AABB
  63.             var worldAABB:b2AABB = new b2AABB();
  64.             worldAABB.lowerBound.Set(-100, -100);
  65.             worldAABB.upperBound.Set(465+100465+100);
  66.             
  67.             // Define the gravity vector
  68.             var gravity:b2Vec2 = new b2Vec2(0.010.0);
  69.             
  70.             // Allow bodies to sleep
  71.             var doSleep:Boolean = true;
  72.             
  73.             // Construct a world object
  74.             _world = new b2World(worldAABB, gravity, doSleep);
  75.             
  76.             _createWall( 0465 / 2504650 );
  77.             _createWall( 465465 / 2504650 );
  78.             _createWall( 465 / 2120300100 );
  79.             _createWall( 465 / 2 + 7021046510, -8 );
  80.             _createWall( 465 / 2 - 70330465105 );
  81.             _createWall( 465 / 2 + 7044046510, -5 );
  82.             
  83.             //衝突判定のリスナをセットする
  84.             _world.SetContactListener( new ContactListener( _eLayer ) );
  85.             
  86.             var t:Timer = new Timer( 1000 );
  87.             t.addEventListener( TimerEvent.TIMER, _createBody );
  88.             t.start();
  89.             
  90.             //debug();
  91.             
  92.             stage.addEventListener(MouseEvent.CLICK, _clickHandler );
  93.             
  94.         }
  95.         
  96.         private function _clickHandler(e:Event):void {
  97.             _oLayer.visible = !_oLayer.visible;
  98.             _wLayer.visible = !_wLayer.visible;
  99.         }
  100.         
  101.         private function _createWall( x:int, y:int, w:int, h:int, r:int ):void {
  102.             
  103.             // Vars used to create bodies
  104.             var body:b2Body;
  105.             var bodyDef:b2BodyDef;
  106.             var boxDef:b2PolygonDef;
  107.             
  108.             // Add ground body
  109.             bodyDef = new b2BodyDef();
  110.             
  111.             bodyDef.position.Set(x / DRAW_SCALE, y / DRAW_SCALE);
  112.             bodyDef.angle = r / (180 / Math.PI);
  113.             
  114.             boxDef = new b2PolygonDef();
  115.             boxDef.SetAsBox(w / 2 / DRAW_SCALE, h / 2 / DRAW_SCALE);
  116.             
  117.             boxDef.friction = 0.3;
  118.             boxDef.density = 0// static bodies require zero density
  119.             
  120.             // Add sprite to body userData
  121.             bodyDef.userData = new PhysBox();
  122.             bodyDef.userData.width = w;
  123.             bodyDef.userData.height = h; 
  124.             bodyDef.userData.x = x;
  125.             bodyDef.userData.y = y;
  126.             bodyDef.userData.rotation = r;
  127.             _wLayer.addChild(bodyDef.userData);
  128.             body = _world.CreateBody(bodyDef);
  129.             body.CreateShape(boxDef);
  130.             
  131.             body.SetMassFromShapes();
  132.             
  133.         }
  134.         
  135.         private function _createBody( e:TimerEvent ):void {
  136.             
  137.             var bodyDef:b2BodyDef;
  138.             var circleDef:b2CircleDef;
  139.             var body:b2Body;
  140.             
  141.             bodyDef = new b2BodyDef();
  142.             bodyDef.position.x = ( Math.random() * 265 + 100 ) / 30 ;
  143.             bodyDef.position.y = 0;
  144.             var rX:Number = Math.random()/4 + 0.3;
  145.             var rY:Number = Math.random()/4 + 0.3;
  146.             
  147.             // Circle
  148.             circleDef = new b2CircleDef();
  149.             circleDef.radius = rX;
  150.             circleDef.density = 1.0;
  151.             circleDef.friction = 0.4;
  152.             circleDef.restitution = 0.5
  153.             
  154.             bodyDef.userData = new PhysCircle();
  155.             bodyDef.userData.width = rX * 2 * DRAW_SCALE;
  156.             bodyDef.userData.height = rX * 2 * DRAW_SCALE;
  157.             
  158.             body = _world.CreateBody(bodyDef);
  159.             body.CreateShape(circleDef);
  160.             
  161.             body.SetMassFromShapes();
  162.             _oLayer.addChild(bodyDef.userData);
  163.             
  164.         }
  165.         
  166.         public function debug():void {
  167.             
  168.             // set debug draw
  169.             var dbgDraw:b2DebugDraw = new b2DebugDraw();
  170.             var dbgSprite:Sprite = new Sprite();
  171.             addChild(dbgSprite);
  172.             dbgDraw.m_sprite = dbgSprite;
  173.             dbgDraw.m_drawScale = 30.0;
  174.             dbgDraw.m_fillAlpha = 0.0;
  175.             dbgDraw.m_lineThickness = 0;
  176.             dbgDraw.m_drawFlags = 0xFFFFFFFF;
  177.             _world.SetDebugDraw(dbgDraw);
  178.             
  179.         }
  180.         
  181.         
  182.         public function Update(e:Event):void{
  183.             
  184.             _world.Step(m_timeStep, m_iterations);
  185.             
  186.             
  187.             //表示周りの更新
  188.             for (var bb:b2Body = _world.m_bodyList; bb; bb = bb.m_next) {
  189.                 
  190.                 //画面外に出たときの判定
  191.                 var bx:Number = bb.GetPosition().x * DRAW_SCALE;
  192.                 var by:Number = bb.GetPosition().y * DRAW_SCALE;
  193.                 if ( bx < -100 || bx > 465+100 || by < -100 ) {
  194.                     _oLayer.removeChild( bb.GetUserData() );
  195.                     _world.DestroyBody( bb );
  196.                     break;
  197.                 }
  198.                 
  199.                 if (bb.m_userData is Sprite){
  200.                     bb.m_userData.x = bb.GetPosition().x * DRAW_SCALE;
  201.                     bb.m_userData.y = bb.GetPosition().y * DRAW_SCALE;
  202.                     bb.m_userData.rotation = bb.GetAngle() * (180 / Math.PI);
  203.                 }
  204.                 
  205.             }
  206.             
  207.         }
  208.         
  209.     }
  210.     
  211. }
  212. import Box2D.Collision.b2ContactPoint;
  213. import Box2D.Collision.Shapes.b2Shape;
  214. import Box2D.Dynamics.b2ContactListener;
  215. import flash.display.*;
  216. import flash.geom.*;
  217. import flash.text.*;
  218. import org.libspark.betweenas3.BetweenAS3;
  219. import org.libspark.betweenas3.easing.Quad;
  220. import org.libspark.betweenas3.events.TweenEvent;
  221. import org.libspark.betweenas3.tweens.ITween;
  222. class PhysBox extends Sprite {
  223.     
  224.     public var count:int = 0;
  225.     
  226.     public function PhysBox() {
  227.         this.graphics.beginFill( 0x999999 );
  228.         this.graphics.drawRect( -50, -50100100 );
  229.         this.graphics.endFill();
  230.     }
  231. }
  232. class PhysCircle extends Sprite {
  233.     
  234.     public var count:int = 0;
  235.     
  236.     public function PhysCircle() {
  237.         this.graphics.beginFill( 0x999999 );
  238.         this.graphics.drawCircle(00100 );
  239.         this.graphics.endFill();
  240.     }
  241. }
  242. class CreateEffect extends Sprite {
  243.     
  244.     public static var _images:Vector.<BitmapData> = new Vector.<BitmapData>;
  245.     
  246.     public static function init( b:BitmapData ):void {
  247.         
  248.         for ( var i:int = 0 ; i < 5 ; i++ ) {
  249.             
  250.             var img:BitmapData = new BitmapData(120120true, 0x0 );
  251.             img.copyPixels( b, new Rectangle( 120*i, 0120120 ), new Point( 00 ), nullnulltrue );
  252.             
  253.             _images.push( img );
  254.             
  255.         }
  256.         
  257.     }
  258.     
  259.     public function CreateEffect( px:Number, py:Number, f:Number ) {
  260.         
  261.         var b:Bitmap;
  262.         if ( f > 7.5 )        b = Bitmap( addChild( new Bitmap( _images[0] ) ) );
  263.         else if ( f > 6 )    b = Bitmap( addChild( new Bitmap( _images[1] ) ) );
  264.         else if ( f > 3 )    b = Bitmap( addChild( new Bitmap( _images[2] ) ) );
  265.         else if ( f > 0 )    b = Bitmap( addChild( new Bitmap( _images[3] ) ) );
  266.         else                { b = Bitmap( addChild( new Bitmap( _images[4] ) ) ); f = 3; }
  267.         
  268.         this.x = px
  269.         b.x = -b.width/2;
  270.         this.y = py
  271.         b.y = -b.height/2;
  272.         this.rotation = Math.random() * 90 - 45;
  273.         
  274.         var bt:ITween = BetweenAS3.tween( this, { alpha:0, scaleX:0.5, scaleY:0.5 }, null0.4, Quad.easeIn );
  275.         bt.addEventListener( TweenEvent.COMPLETE, _complete );
  276.         bt.play();
  277.         
  278.     }
  279.     
  280.     private function _complete(e:TweenEvent):void {
  281.         this.parent.removeChild( this );
  282.     }
  283.     
  284. }
  285. class ContactListener extends b2ContactListener {
  286.     
  287.     private var _root:Sprite;
  288.     
  289.     public function ContactListener( root:Sprite ) {
  290.         _root = root;
  291.     }
  292.     
  293.     public override function Add(point:b2ContactPoint):void {
  294.         
  295.         var f:Number = point.shape1.GetBody().m_linearVelocity.Length() + point.shape2.GetBody().m_linearVelocity.Length();
  296.         
  297.         //trace("ガン!", f/*, point.position.x, point.position.y*/ );
  298.         if ( f > 3 ) {
  299.             _root.addChild( new CreateEffect( point.position.x * Onomatopoeia.DRAW_SCALE, point.position.y * Onomatopoeia.DRAW_SCALE, f ) );
  300.         }
  301.         
  302.     }
  303.     
  304.     public override function Persist( point:b2ContactPoint ):void {
  305.         
  306.         var shape:b2Shape;
  307.         
  308.         if ( point.shape1.m_density == 0 && point.shape2.m_density == 1 ) shape = point.shape2;
  309.         else if ( point.shape1.m_density == 1 && point.shape2.m_density == 0 ) shape = point.shape1;
  310.         else return;
  311.         
  312.         shape.GetBody().GetUserData().count += Math.ceil( shape.GetBody().m_linearVelocity.Length() );
  313.         
  314.         if ( shape.GetBody().GetUserData().count > 0 ) {
  315.             _root.addChild( new CreateEffect( point.position.x * Onomatopoeia.DRAW_SCALE, point.position.y * Onomatopoeia.DRAW_SCALE, -1 ) );
  316.             shape.GetBody().GetUserData().count = -20;
  317.         }
  318.         
  319.     }
  320.     
  321.     public override function Remove(point:b2ContactPoint):void {
  322.         
  323.         point.shape1.GetBody().m_userData.count = -5;
  324.         point.shape2.GetBody().m_userData.count = -5;
  325.         
  326.     }
  327.     
  328. }
noswf
  1. // forked from minon's おくれてきたおのまとぺ
  2. //ソース適当すぎるので見ないでぇぇ
  3. package{
  4.     
  5.     import Box2D.Dynamics.Contacts.*;
  6.     import flash.display.*;
  7.     import flash.events.*;
  8.     import flash.net.URLRequest;
  9.     import flash.utils.Timer;
  10.     import Box2D.Dynamics.*;
  11.     import Box2D.Collision.*;
  12.     import Box2D.Collision.Shapes.*;
  13.     import Box2D.Common.Math.*;
  14.     import net.hires.debug.Stats;
  15.     import flash.system.Security;
  16.     [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "0xFFFFFF")]
  17.     
  18.     public class Onomatopoeia extends Sprite{
  19.         
  20.         public static var DRAW_SCALE:int = 30;
  21.         
  22.         public var m_iterations:int = 10;
  23.         public var m_timeStep:Number = 1.0 / 30.0;
  24.         
  25.         private var _world:b2World;
  26.         private var _oLayer:Sprite = new Sprite();
  27.         private var _eLayer:Sprite = new Sprite();
  28.         private var _wLayer:Sprite = new Sprite();
  29.         
  30.         private var _loader:Loader = new Loader();
  31.         
  32.         public function Onomatopoeia(){
  33.                         Wonderfl.capture_delay( 20 );
  34.             Security.loadPolicyFile("http://labs.minomix.net/crossdomain.xml");  
  35.             _loader.contentLoaderInfo.addEventListener(Event.INIT, _loadInitHandler );
  36.             //_loader.load( new URLRequest("../material/gion2.png") );
  37.             _loader.load( new URLRequest("http://www.blf-g.com/logo02.png") );
  38.             
  39.         }
  40.         
  41.         private function _loadInitHandler(e:Event):void {
  42.             
  43.             var tmp:BitmapData = new BitmapData( _loader.width, _loader.height, true0 );
  44.             tmp.draw( _loader );
  45.             
  46.             CreateEffect.init( tmp );
  47.             _init();
  48.             
  49.         }
  50.         
  51.         private function _init():void {
  52.             
  53.             this.addChild( _wLayer );
  54.             this.addChild( _oLayer );
  55.             this.addChild( _eLayer );
  56.             _oLayer.visible = false;
  57.             _wLayer.visible = false;
  58.             
  59.             // Add event for main loop
  60.             addEventListener(Event.ENTER_FRAME, Update, false0true);
  61.             
  62.             // Creat world AABB
  63.             var worldAABB:b2AABB = new b2AABB();
  64.             worldAABB.lowerBound.Set(-100, -100);
  65.             worldAABB.upperBound.Set(465+100465+100);
  66.             
  67.             // Define the gravity vector
  68.             var gravity:b2Vec2 = new b2Vec2(0.010.0);
  69.             
  70.             // Allow bodies to sleep
  71.             var doSleep:Boolean = true;
  72.             
  73.             // Construct a world object
  74.             _world = new b2World(worldAABB, gravity, doSleep);
  75.             
  76.             _createWall( 0465 / 2504650 );
  77.             _createWall( 465465 / 2504650 );
  78.             _createWall( 465 / 2120300100 );
  79.             _createWall( 465 / 2 + 7021046510, -8 );
  80.             _createWall( 465 / 2 - 70330465105 );
  81.             _createWall( 465 / 2 + 7044046510, -5 );
  82.             
  83.             //衝突判定のリスナをセットする
  84.             _world.SetContactListener( new ContactListener( _eLayer ) );
  85.             
  86.             var t:Timer = new Timer( 1000 );
  87.             t.addEventListener( TimerEvent.TIMER, _createBody );
  88.             t.start();
  89.             
  90.             //debug();
  91.             
  92.             stage.addEventListener(MouseEvent.CLICK, _clickHandler );
  93.             
  94.         }
  95.         
  96.         private function _clickHandler(e:Event):void {
  97.             _oLayer.visible = !_oLayer.visible;
  98.             _wLayer.visible = !_wLayer.visible;
  99.         }
  100.         
  101.         private function _createWall( x:int, y:int, w:int, h:int, r:int ):void {
  102.             
  103.             // Vars used to create bodies
  104.             var body:b2Body;
  105.             var bodyDef:b2BodyDef;
  106.             var boxDef:b2PolygonDef;
  107.             
  108.             // Add ground body
  109.             bodyDef = new b2BodyDef();
  110.             
  111.             bodyDef.position.Set(x / DRAW_SCALE, y / DRAW_SCALE);
  112.             bodyDef.angle = r / (180 / Math.PI);
  113.             
  114.             boxDef = new b2PolygonDef();
  115.             boxDef.SetAsBox(w / 2 / DRAW_SCALE, h / 2 / DRAW_SCALE);
  116.             
  117.             boxDef.friction = 0.3;
  118.             boxDef.density = 0// static bodies require zero density
  119.             
  120.             // Add sprite to body userData
  121.             bodyDef.userData = new PhysBox();
  122.             bodyDef.userData.width = w;
  123.             bodyDef.userData.height = h; 
  124.             bodyDef.userData.x = x;
  125.             bodyDef.userData.y = y;
  126.             bodyDef.userData.rotation = r;
  127.             _wLayer.addChild(bodyDef.userData);
  128.             body = _world.CreateBody(bodyDef);
  129.             body.CreateShape(boxDef);
  130.             
  131.             body.SetMassFromShapes();
  132.             
  133.         }
  134.         
  135.         private function _createBody( e:TimerEvent ):void {
  136.             
  137.             var bodyDef:b2BodyDef;
  138.             var circleDef:b2CircleDef;
  139.             var body:b2Body;
  140.             
  141.             bodyDef = new b2BodyDef();
  142.             bodyDef.position.x = ( Math.random() * 265 + 100 ) / 30 ;
  143.             bodyDef.position.y = 0;
  144.             var rX:Number = Math.random()/4 + 0.3;
  145.             var rY:Number = Math.random()/4 + 0.3;
  146.             
  147.             // Circle
  148.             circleDef = new b2CircleDef();
  149.             circleDef.radius = rX;
  150.             circleDef.density = 1.0;
  151.             circleDef.friction = 0.4;
  152.             circleDef.restitution = 0.5
  153.             
  154.             bodyDef.userData = new PhysCircle();
  155.             bodyDef.userData.width = rX * 2 * DRAW_SCALE;
  156.             bodyDef.userData.height = rX * 2 * DRAW_SCALE;
  157.             
  158.             body = _world.CreateBody(bodyDef);
  159.             body.CreateShape(circleDef);
  160.             
  161.             body.SetMassFromShapes();
  162.             _oLayer.addChild(bodyDef.userData);
  163.             
  164.         }
  165.         
  166.         public function debug():void {
  167.             
  168.             // set debug draw
  169.             var dbgDraw:b2DebugDraw = new b2DebugDraw();
  170.             var dbgSprite:Sprite = new Sprite();
  171.             addChild(dbgSprite);
  172.             dbgDraw.m_sprite = dbgSprite;
  173.             dbgDraw.m_drawScale = 30.0;
  174.             dbgDraw.m_fillAlpha = 0.0;
  175.             dbgDraw.m_lineThickness = 0;
  176.             dbgDraw.m_drawFlags = 0xFFFFFFFF;
  177.             _world.SetDebugDraw(dbgDraw);
  178.             
  179.         }
  180.         
  181.         
  182.         public function Update(e:Event):void{
  183.             
  184.             _world.Step(m_timeStep, m_iterations);
  185.             
  186.             
  187.             //表示周りの更新
  188.             for (var bb:b2Body = _world.m_bodyList; bb; bb = bb.m_next) {
  189.                 
  190.                 //画面外に出たときの判定
  191.                 var bx:Number = bb.GetPosition().x * DRAW_SCALE;
  192.                 var by:Number = bb.GetPosition().y * DRAW_SCALE;
  193.                 if ( bx < -100 || bx > 465+100 || by < -100 ) {
  194.                     _oLayer.removeChild( bb.GetUserData() );
  195.                     _world.DestroyBody( bb );
  196.                     break;
  197.                 }
  198.                 
  199.                 if (bb.m_userData is Sprite){
  200.                     bb.m_userData.x = bb.GetPosition().x * DRAW_SCALE;
  201.                     bb.m_userData.y = bb.GetPosition().y * DRAW_SCALE;
  202.                     bb.m_userData.rotation = bb.GetAngle() * (180 / Math.PI);
  203.                 }
  204.                 
  205.             }
  206.             
  207.         }
  208.         
  209.     }
  210.     
  211. }
  212. import Box2D.Collision.b2ContactPoint;
  213. import Box2D.Collision.Shapes.b2Shape;
  214. import Box2D.Dynamics.b2ContactListener;
  215. import flash.display.*;
  216. import flash.geom.*;
  217. import flash.text.*;
  218. import org.libspark.betweenas3.BetweenAS3;
  219. import org.libspark.betweenas3.easing.Quad;
  220. import org.libspark.betweenas3.events.TweenEvent;
  221. import org.libspark.betweenas3.tweens.ITween;
  222. class PhysBox extends Sprite {
  223.     
  224.     public var count:int = 0;
  225.     
  226.     public function PhysBox() {
  227.         this.graphics.beginFill( 0x999999 );
  228.         this.graphics.drawRect( -50, -50100100 );
  229.         this.graphics.endFill();
  230.     }
  231. }
  232. class PhysCircle extends Sprite {
  233.     
  234.     public var count:int = 0;
  235.     
  236.     public function PhysCircle() {
  237.         this.graphics.beginFill( 0x999999 );
  238.         this.graphics.drawCircle(00100 );
  239.         this.graphics.endFill();
  240.     }
  241. }
  242. class CreateEffect extends Sprite {
  243.     
  244.     public static var _images:Vector.<BitmapData> = new Vector.<BitmapData>;
  245.     
  246.     public static function init( b:BitmapData ):void {
  247.         
  248.         for ( var i:int = 0 ; i < 5 ; i++ ) {
  249.             
  250.             var img:BitmapData = new BitmapData(120120true, 0x0 );
  251.             img.copyPixels( b, new Rectangle( 120*i, 0120120 ), new Point( 00 ), nullnulltrue );
  252.             
  253.             _images.push( img );
  254.             
  255.         }
  256.         
  257.     }
  258.     
  259.     public function CreateEffect( px:Number, py:Number, f:Number ) {
  260.         
  261.         var b:Bitmap;
  262.         if ( f > 7.5 )        b = Bitmap( addChild( new Bitmap( _images[0] ) ) );
  263.         else if ( f > 6 )    b = Bitmap( addChild( new Bitmap( _images[1] ) ) );
  264.         else if ( f > 3 )    b = Bitmap( addChild( new Bitmap( _images[2] ) ) );
  265.         else if ( f > 0 )    b = Bitmap( addChild( new Bitmap( _images[3] ) ) );
  266.         else                { b = Bitmap( addChild( new Bitmap( _images[4] ) ) ); f = 3; }
  267.         
  268.         this.x = px
  269.         b.x = -b.width/2;
  270.         this.y = py
  271.         b.y = -b.height/2;
  272.         this.rotation = Math.random() * 90 - 45;
  273.         
  274.         var bt:ITween = BetweenAS3.tween( this, { alpha:0, scaleX:0.5, scaleY:0.5 }, null0.4, Quad.easeIn );
  275.         bt.addEventListener( TweenEvent.COMPLETE, _complete );
  276.         bt.play();
  277.         
  278.     }
  279.     
  280.     private function _complete(e:TweenEvent):void {
  281.         this.parent.removeChild( this );
  282.     }
  283.     
  284. }
  285. class ContactListener extends b2ContactListener {
  286.     
  287.     private var _root:Sprite;
  288.     
  289.     public function ContactListener( root:Sprite ) {
  290.         _root = root;
  291.     }
  292.     
  293.     public override function Add(point:b2ContactPoint):void {
  294.         
  295.         var f:Number = point.shape1.GetBody().m_linearVelocity.Length() + point.shape2.GetBody().m_linearVelocity.Length();
  296.         
  297.         //trace("ガン!", f/*, point.position.x, point.position.y*/ );
  298.         if ( f > 3 ) {
  299.             _root.addChild( new CreateEffect( point.position.x * Onomatopoeia.DRAW_SCALE, point.position.y * Onomatopoeia.DRAW_SCALE, f ) );
  300.         }
  301.         
  302.     }
  303.     
  304.     public override function Persist( point:b2ContactPoint ):void {
  305.         
  306.         var shape:b2Shape;
  307.         
  308.         if ( point.shape1.m_density == 0 && point.shape2.m_density == 1 ) shape = point.shape2;
  309.         else if ( point.shape1.m_density == 1 && point.shape2.m_density == 0 ) shape = point.shape1;
  310.         else return;
  311.         
  312.         shape.GetBody().GetUserData().count += Math.ceil( shape.GetBody().m_linearVelocity.Length() );
  313.         
  314.         if ( shape.GetBody().GetUserData().count > 0 ) {
  315.             _root.addChild( new CreateEffect( point.position.x * Onomatopoeia.DRAW_SCALE, point.position.y * Onomatopoeia.DRAW_SCALE, -1 ) );
  316.             shape.GetBody().GetUserData().count = -20;
  317.         }
  318.         
  319.     }
  320.     
  321.     public override function Remove(point:b2ContactPoint):void {
  322.         
  323.         point.shape1.GetBody().m_userData.count = -5;
  324.         point.shape2.GetBody().m_userData.count = -5;
  325.         
  326.     }
  327.     
  328. }
noswf
Get Adobe Flash Player