よくあるボールの動き 型などを極力省いた方が簡潔ですきなのですが、Warningが大量にでてしまいます。。。 dacyou forked:0favorite:4lines:145license : MIT License modified : 2010-01-31 18:45:13 Embed Tweet //型などを極力省いた方が簡潔ですきなのですが、Warningが大量にでてしまいます。。。 package { import flash.display.Sprite [SWF(width=465, height=465, frameRate=30, backgroundColor=0x000000)] public class BallTest extends Sprite { function BallTest() { Area.setParent( this ) new Velocity( new Area(0,0,230,230) ) new Gravity( 2, new Area(235,0,230,230) ) new Easing( 0.1, new Area(0,235,230,230) ) new Spring( 0.2, 0.8, new Area(235,235,230,230) ) } } }//end package import flash.display.Sprite import flash.events.Event import flash.text.TextField ///////////////////////////////////////////////////////////////////// class Ball extends Sprite { var _radius var _vx, _vy var _area var _areaWidth, _areaHeight //===================================================== function _move( e ) { _checkCollision() } //===================================================== function _checkCollision() { _checkWall( 0, 0, _areaWidth, _areaHeight ) } //----------------------------------------------------- function _checkWall( left, top, right, bottom ) { if ( x - _radius < left ) { x = left + _radius _vx = -_vx } else if ( right < x + _radius ) { x = right - _radius _vx = -_vx } if ( y - _radius < top ) { y = top + _radius _vy = -_vy } else if ( bottom < y + _radius ) { y = bottom - _radius _vy = -_vy } } //===================================================== function _draw( color ) { graphics.beginFill( color ) graphics.drawCircle( 0, 0, _radius ) } //===================================================== function Ball( area :Area, radius = 10, color = 0xffffff ) { _radius = radius _vx = _vy = 0 _area = area _areaWidth = area.width _areaHeight = area.height area.addChild( this ) area.title( this ) _draw( color ) addEventListener( Event.ENTER_FRAME, _move ) } } ///////////////////////////////////////////////////////////////////// class Velocity extends Ball { //===================================================== override function _move( e ) { x += _vx y += _vy _checkCollision() } //===================================================== function Velocity( area ) { super( area ) _vx = random( 10, -10 ) _vy = random( 10, -10 ) } } ///////////////////////////////////////////////////////////////////// class Gravity extends Velocity { var _gravity //===================================================== override function _move( e ) { _vy += _gravity x += _vx y += _vy _checkCollision() } //===================================================== function Gravity( gravity, area ) { super( area ) _gravity = gravity } } ///////////////////////////////////////////////////////////////////// class Easing extends Ball { var _easing //===================================================== override function _move( e ) { _vx = (_area.mouseX - x)*_easing _vy = (_area.mouseY - y)*_easing x += _vx y += _vy _checkCollision() } //===================================================== function Easing( easing, area ) { super( area ) _easing = easing } } ///////////////////////////////////////////////////////////////////// class Spring extends Ball { var _spring var _friction //===================================================== override function _move( e ) { _vx += (_area.mouseX - x)*_spring _vy += (_area.mouseY - y)*_spring _vx *= _friction _vy *= _friction x += _vx y += _vy _checkCollision() } //===================================================== function Spring( spring, friction, area ) { super( area ) _spring = spring _friction = friction } } ///////////////////////////////////////////////////////////////////// class Area extends Sprite { static var _parent :Sprite //===================================================== public static function setParent( p ) { _parent = p } //===================================================== function title( s :Sprite ) { var field :TextField = new TextField field.text = className( s ) field.textColor = 0xffffff field.selectable = false field.autoSize = "left" addChild( field ) } //===================================================== function Area( x, y, w, h, color = 0x333333 ) { graphics.beginFill( color ) graphics.drawRect( 0, 0, w, h ) this.x = x this.y = y _parent.addChild( this ) } } //========================================================= function random( max, min = 0 ) { return min + (max-min)*Math.random() } //========================================================= function className( obj ) { return obj.toString().match( /[A-Z]+[a-z0-9]+/ ).join() } Code Fullscreen Preview Fullscreen Phahede Evolutor Mae_ITR idettman : attractionexamplesmousephysics attraction examples mouse physics mouseX mouseY Math.min match Math.max join selectable height width textColor toString addEventListener autoSize TextField text addChild Event.ENTER_FRAME Math.random Sprite