forked from: ボールのお散歩
----
「ボールのお散歩」改め、クマのお散歩
ボールのレイヤー(というのか?)の上下関係を考慮し、
最前面のボールが先頭に来るように変更
----
/**
* Copyright tenasaku ( http://wonderfl.net/user/tenasaku )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ds0y
*/
// forked from makoto's ボールのお散歩
// forked from nengafl's nengafl
/* ----
「ボールのお散歩」改め、クマのお散歩
ボールのレイヤー(というのか?)の上下関係を考慮し、
最前面のボールが先頭に来るように変更
---- */
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
[SWF(width="465", height="465", backgroundColor="0xffffff", frameRate="30")]
public class FrictionSample extends Sprite
{
private var _ball1:MyBall; //1個目のボール (最後尾)
private var _ball2:MyBall; //2個目のボール
private var _ball3:MyBall; //3個目のボール
private var _ball4:MyBall; //4個目のボール
private var _ball5:MyBall; //5個目のボール
private var _ball6:MyBall; //6個目のボール
private var _ball7:MyBall; //7個目のボール
private var _ball8:MyBall; //8個目のボール
private var _ball9:MyBall; //9個目のボール
private var _ball10:MyBall;//10個目のボール (先頭)
public function FrictionSample()
{
//ボールの作成
_ball1 = new MyBall(1); //1個目のボール
_ball2 = new MyBall(2); //2個目のボール
_ball3 = new MyBall(3); //3個目のボール
_ball4 = new MyBall(4); //4個目のボール
_ball5 = new MyBall(5); //5個目のボール
_ball6 = new MyBall(6); //6個目のボール
_ball7 = new MyBall(7); //7個目のボール
_ball8 = new MyBall(8); //8個目のボール
_ball9 = new MyBall(9); //9個目のボール
_ball10 = new MyBall(10); //10個目のボール
//ボールの位置を指定
_ball1.x = _ball1.y = 180;//1個目のボールの位置
_ball2.x = _ball2.y = 160;//2個目のボールの位置
_ball3.x = _ball3.y = 140;//3個目のボールの位置
_ball4.x = _ball4.y = 120;//4個目のボールの位置
_ball5.x = _ball5.y = 100;//5個目のボールの位置
_ball6.x = _ball6.y = 80;//6個目のボールの位置
_ball7.x = _ball7.y = 60;//7個目のボールの位置
_ball8.x = _ball8.y = 40;//8個目のボールの位置
_ball9.x = _ball9.y = 20;//9個目のボールの位置
_ball10.x = _ball10.y = 0;//10個目のボールの位置
//ボールを表示
addChild(_ball1); //1個目のボール
addChild(_ball2); //2個目のボール
addChild(_ball3); //3個目のボール
addChild(_ball4); //4個目のボール
addChild(_ball5); //5個目のボール
addChild(_ball6); //6個目のボール
addChild(_ball7); //7個目のボール
addChild(_ball8); //8個目のボール
addChild(_ball9); //9個目のボール
addChild(_ball10);//10個目のボール
addEventListener(Event.ENTER_FRAME,loop);
addEventListener(MouseEvent.CLICK,clickHandler);
}
//ここではクリックされたら丸が消える処理
public function clear():void
{
// 次の一行は loop() 内の addEventListener 削除に伴いコメントアウト
// イベントハンドラの解除
// removeEventListener(MouseEvent.CLICK,clickHandler);
//円の消去
graphics.clear();
// この関数はどこから呼ばれているんだろう?
}
private function loop(event:Event):void
{
// ボール1に2〜10までボールがついてくる処理
// -- 位置関係を逆転させました (tenasaku)
// -- だけど addChild の順序を変えればよかったのか...
_ball10.x += friction(_ball10.x,mouseX,8); // 1個目のボールX
_ball10.y += friction(_ball10.y,mouseY,8); // 1個目のボールY
_ball9.x += friction(_ball9.x,_ball10.x,5); // 2個目のボールX
_ball9.y += friction(_ball9.y,_ball10.y,5); // 2個目のボールY
_ball8.x += friction(_ball8.x,_ball9.x,5); // 3個目のボールX
_ball8.y += friction(_ball8.y,_ball9.y,5); // 3個目のボールY
_ball7.x += friction(_ball7.x,_ball8.x,5); // 4個目のボールX
_ball7.y += friction(_ball7.y,_ball8.y,5); // 4個目のボールY
_ball6.x += friction(_ball6.x,_ball7.x,5); // 5個目のボールX
_ball6.y += friction(_ball6.y,_ball7.y,5); // 5個目のボールY
_ball5.x += friction(_ball5.x,_ball6.x,5); // 6個目のボールX
_ball5.y += friction(_ball5.y,_ball6.y,5); // 6個目のボールY
_ball4.x += friction(_ball4.x,_ball5.x,5); // 7個目のボールX
_ball4.y += friction(_ball4.y,_ball5.y,5); // 7個目のボールY
_ball3.x += friction(_ball3.x,_ball4.x,5); // 8個目のボールX
_ball3.y += friction(_ball3.y,_ball4.y,5); // 8個目のボールY
_ball2.x += friction(_ball2.x,_ball3.x,5); // 9個目のボールX
_ball2.y += friction(_ball2.y,_ball3.y,5); // 9個目のボールY
_ball1.x += friction(_ball1.x,_ball2.x,5); //10個目のボールX
_ball1.y += friction(_ball1.y,_ball2.y,5); //10個目のボールY
// addEventListener は削除しました (tenasaku)
}
//ゼノンの逆説を使ったイージング計算
private function friction(src:Number,dest:Number,num:Number):Number
{
return (dest - src) / num;
}
//ここでは円が消えたあとのボールの位置
private function clickHandler(event:MouseEvent):void
{
x = _ball10.x;
y = _ball10.y;
}
}
}
import flash.display.Sprite;
// もはや ボール とは言えんな、これは (tenasaku)
class MyBall extends Sprite
{
public function MyBall(c:int):void
{
var _theta:Number = (c-1)*Math.PI/6;
var b:uint = Math.floor((1+Math.cos(_theta))*127.99);
var r:uint = Math.floor((1+Math.cos(_theta+Math.PI*2/3))*127.99);
var g:uint = Math.floor((1+Math.cos(_theta+Math.PI*4/3))*127.99);
var cc:uint = ((r << 16)|(g << 8)|b) & 0xffffff;
// クマ耳
graphics.beginFill(cc);
graphics.lineStyle(0,0x000000);
graphics.drawCircle(-16,-13,9);
graphics.drawCircle( 16,-13,9);
graphics.endFill();
// クマ顔面
graphics.beginFill(cc);
graphics.lineStyle(1,0x000000);
graphics.drawCircle(0,0,20);
graphics.endFill();
// クマ口
graphics.lineStyle(2,0x000000);
graphics.moveTo(-1, 7);
graphics.lineTo(-7,11);
graphics.moveTo( 1, 7);
graphics.lineTo( 7,11);
// クマ鼻
graphics.lineStyle(1,0x000000);
graphics.beginFill(0x000000);
graphics.moveTo(-3, 2);
graphics.lineTo( 3, 2);
graphics.lineTo( 1, 6);
graphics.lineTo(-1, 6);
graphics.lineTo(-3, 2);
graphics.endFill();
// クマ目
graphics.beginFill(0x000000);
graphics.drawCircle(-11, 0,1);
graphics.drawCircle( 11, 0,1);
graphics.endFill();
}
}