磁石forked from: forked from: 短くしてみました
forked from forked from: 短くしてみました (diff: 1)
クラスを使えばとてもすっきりしたコードを作ることができるんですね。 コードの勉強が不十分だったので、今回は大変参考になりました。 初歩的な質問にお答えいただいて、ほんとうにありがとうございました。 バネ運動を作ったのですが、同じようなコードを何度も繰り返して長くなりました。 forや関数を使っていろいろ試みたのですが、うまくいきません。 もしよろしければ、良い方法を教えていただけないでしょうか 下記のコードはいろいろ試みる前の長いコードです。 初心者過ぎる質問、汚いコードで申し訳ありません。 よろしくおねがいします。 俺流リファクタリング とりあえず短くなりました〜 by selflash
ActionScript3 source code
/**
* Copyright mikako ( http://wonderfl.net/user/mikako )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/3GwC
*/
// forked from Tamanegi_kenshi's forked from: 短くしてみました
//クラスを使えばとてもすっきりしたコードを作ることができるんですね。
//コードの勉強が不十分だったので、今回は大変参考になりました。
//
//初歩的な質問にお答えいただいて、ほんとうにありがとうございました。
// forked from yooKo's 短くしてみました
// forked from Tamanegi_kenshi's コードを短くするにはどうすればよいですか?
//バネ運動を作ったのですが、同じようなコードを何度も繰り返して長くなりました。
//forや関数を使っていろいろ試みたのですが、うまくいきません。
//
//もしよろしければ、良い方法を教えていただけないでしょうか
//
//下記のコードはいろいろ試みる前の長いコードです。
//初心者過ぎる質問、汚いコードで申し訳ありません。
//よろしくおねがいします。
//俺流リファクタリング
//とりあえず短くなりました〜 by selflash
package{
import flash.display.Sprite;
import flash.events.Event;
public class sp extends Sprite{
private var balls:Array = [];
public function sp():void {
for( var i:int = 0; i < 3; i++ ){
var o:Ball = new Ball( 0.08 );
addChild( o );
balls[i] = o;
}
addEventListener( Event.ENTER_FRAME, loop );
}
private function loop( e:Event ):void{
for( var i:int = 0; i < 3; i++ ) {
var o:Ball = balls[i];
var xx:Number = ( i == 0 )? mouseX : balls[i - 1].x;
var yy:Number = ( i == 0 )? mouseY : balls[i - 1].y;
var dx:Number = ( xx - o.x );
var dy:Number = ( yy - o.y );
o.ax = dx * o.spring;
o.ay = dy * o.spring;
o.vx += o.ax;
o.vx *= o.friction;
o.vy += o.ay;
o.vy *= o.friction;
o.vy += o.gravity;
o.x += o.vx;
o.y += o.vy;
}
}
}
}
import flash.display.Sprite;
import flash.display.Graphics;
import flash.display.GradientType;
import flash.geom.Matrix;
class Ball extends Sprite {
public var ax:Number = 0;
public var ay:Number = 0;
public var vx:Number = 0;
public var vy:Number = 0;
public var spring:Number = 0;
public var friction:Number = 0.9;
public var gravity:Number = 4;
public function Ball( spring:Number ):void {
this.spring = spring;
var mtx:Matrix = new Matrix();
mtx.createGradientBox( 30, 30, 0, -20, -20 );
var g:Graphics = graphics;
g.beginGradientFill(
GradientType.RADIAL,
[0x000000,0x000000],
[0.3,1],
[0,255],
mtx
);
g.drawCircle( 0, 0, 20 );
g.endFill();
}
}