package { import flash.display.*; import flash.events.*; import flash.utils.*; import flash.net.*; import flash.system.*; import jp.progression.commands.*; import jp.progression.commands.lists.*; import jp.progression.commands.display.*; import jp.progression.commands.net.*; import jp.progression.commands.tweens.*; import jp.progression.events.*; import caurina.transitions.*; [SWF(frameRate=30, width=500, height=500, backgroundColor="#FFFFFF")] public class Wanco01 extends Sprite { public static var GRAPHICS_URL:String = "http://swf.wonderfl.net/static/assets/checkmate05/wancoAmateur.swf"; private var _motionList:Array = [ "StayMotion", //"JumpMotion", //"HighJumpMotion", "WalkMotion", "RunMotion", "SquatMotion", "QuestionMotion", "ExclamationMotion", "HeartMotion", "PoutMotion", "StarMotion", "SingMotion", "SleepMotion", "WakeMotion" ]; public function Wanco01(){ super(); Wonderfl.capture_delay( 30 ); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var target:Sprite = this; var com:SerialList = new SerialList(); com.addCommand( new LoadSWF( new URLRequest( GRAPHICS_URL ) ), function():void { var loader:Loader = Loader( this.latestData ); var domain:ApplicationDomain = loader.contentLoaderInfo.applicationDomain; target.addChild(new World(_motionList, domain)); } ); com.execute(); } } } import flash.display.*; import flash.events.*; import flash.net.*; import flash.system.*; import flash.utils.*; import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Dynamics.Joints.*; import Box2D.Dynamics.Contacts.*; import Box2D.Common.*; import Box2D.Common.Math.*; import net.hires.debug.Stats; class World extends Sprite { private var _world:b2World; private const DRAW_SCALE:Number = 100; private var _iterations:int = 10; private var _timeStep:Number = 1.0/30.0; private var _debug:Boolean = false private var _gravity:b2Vec2; private var _doSleep:Boolean = false private var _motionList:Array; private var _domain:ApplicationDomain; private var _wancoTimer:Timer public function World(list:Array, domain:ApplicationDomain ) { trace(list); addEventListener(Event.ADDED_TO_STAGE, init); _motionList = list; _domain = domain; //addChild(new Stats()); } private function init(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE, init); var worldAABB:b2AABB = new b2AABB(); worldAABB.lowerBound.Set(-100, -100); worldAABB.upperBound.Set(100, 100); _gravity = new b2Vec2(0, 10); _world = new b2World(worldAABB, _gravity, _doSleep); // デバッグ表示 if (_debug) { var dbgDraw:b2DebugDraw = new b2DebugDraw(); var dbgSprite:Sprite = new Sprite(); addChild(dbgSprite); dbgDraw.m_sprite = dbgSprite; dbgDraw.m_drawScale = DRAW_SCALE; dbgDraw.m_fillAlpha = 0.0; dbgDraw.m_alpha = 1.0; dbgDraw.m_lineThickness = 1.0; dbgDraw.m_drawFlags = 0xFFFFFFFF; _world.SetDebugDraw(dbgDraw); } var stw:Number = stage.stageWidth; var sth:Number = stage.stageHeight; createBox("floor", stw/2, sth, stw, 10); addEventListener(Event.ENTER_FRAME, update); _wancoTimer = new Timer(1000); _wancoTimer.addEventListener(TimerEvent.TIMER, timerHandler); _wancoTimer.start(); } private function timerHandler(e:TimerEvent):void { createWanco("wanco", Math.random()*stage.stageWidth, -50); } private function createBox(id:String, x:Number, y:Number, w:Number, h:Number):void { var bodyDef:b2BodyDef = new b2BodyDef(); bodyDef.position.x = x/DRAW_SCALE; bodyDef.position.y = y/DRAW_SCALE; bodyDef.userData = {}; bodyDef.userData.id = id; var display:Sprite = new Sprite(); var g:Graphics = display.graphics; g.lineStyle(1, 0xFFFFFF); g.drawRect(-w/2,-h/2,w,h); addChild(display); bodyDef.userData.displayObject = display; var boxDef:b2PolygonDef = new b2PolygonDef(); boxDef.SetAsBox(w/2/DRAW_SCALE, h/2/DRAW_SCALE); boxDef.density = 0; // 固定されたオブジェクトに var body:b2Body = _world.CreateBody(bodyDef); body.CreateShape(boxDef); } private function createWanco(id:String, x:Number, y:Number):void { var wan:MovieClip = new ( _domain.getDefinition( _motionList[Math.floor(Math.random()*_motionList.length)]) as Class ); wan.stop(); var s:Sprite = new Sprite(); s.addChild(wan); addChild(s); s.x = -100; s.y = -100; var bodyDef:b2BodyDef = new b2BodyDef(); bodyDef.position.x = x/DRAW_SCALE; bodyDef.position.y = y/DRAW_SCALE; bodyDef.userData = {}; bodyDef.userData.id = id; bodyDef.userData.displayObject = s; var boxDef:b2PolygonDef = new b2PolygonDef(); var scale:Number = scale = 1 + Math.random(); wan.scaleX = wan.scaleY = scale; wan.y = 55*scale; boxDef.vertexCount = 6; boxDef.vertices[0].Set(5*scale/DRAW_SCALE, 0*scale/DRAW_SCALE); boxDef.vertices[1].Set(30*scale/DRAW_SCALE, 40*scale/DRAW_SCALE); boxDef.vertices[2].Set(20*scale/DRAW_SCALE, 55*scale/DRAW_SCALE); boxDef.vertices[3].Set(-20*scale/DRAW_SCALE, 55*scale/DRAW_SCALE); boxDef.vertices[4].Set(-30*scale/DRAW_SCALE, 40*scale/DRAW_SCALE); boxDef.vertices[5].Set(-5*scale/DRAW_SCALE, 0*scale/DRAW_SCALE); boxDef.density = 0.5; boxDef.friction = 0.7; boxDef.restitution = 0.4; var body:b2Body = _world.CreateBody(bodyDef); body.CreateShape(boxDef); body.SetMassFromShapes(); } private function update(event:Event):void { if (_world == null) return; _world.Step(_timeStep, 5); for (var bb:b2Body = _world.m_bodyList; bb; bb = bb.m_next) { if (bb.m_userData) { if (bb.m_userData.displayObject is Sprite) { var p:Object = bb.GetPosition(); var d:DisplayObject = bb.m_userData.displayObject; d.x = p.x * DRAW_SCALE; d.y = p.y * DRAW_SCALE; d.rotation = bb.GetAngle() * (180/Math.PI); if(d.y > stage.stageHeight ) { removeChild(d); _world.DestroyBody(bb); } } } } } } forked from: Checkmate vol.5 Amateur