ボールを投げる 【後編】
ボールを投げるアクションの作り方の後編です
【前編】はこちら
まずはボールをつかんで離す設定を追加
つかんでいる時にはボールが止まり、離すと動くように
ドラッグ領域を設定しておいて、外れたらドラッグ解除するように設定
//ボールの初期移動量 var speedX = 5; var speedY = 4; //ボールを持っているかどうか var pickup:Boolean = false; //ボタンモード ball_mc.buttonMode = true; //ボールの動き設定 addEventListener(Event.ENTER_FRAME,ballAction); function ballAction(event:Event):void { //ボールのスピードが一定以下でスピード0に if (Math.abs(speedX) < 0.1) { speedX = 0; } if (Math.abs(speedY) < 0.1) { speedY = 0; } //ボールをつかんだ時の設定 if (pickup == true) { } //ボールをつかんでない時の動きの設定 if (pickup == false) { speedX *= 0.99; //空気抵抗でどんどん遅く speedY = speedY*0.99+0.98; //空気抵抗と重力の設定 ball_mc.x = ball_mc.x+speedX; ball_mc.y = ball_mc.y+speedY; //壁に当たったときの設定 //右の壁に当たったとき if (ball_mc.x > 400-ball_mc.width/2) { ball_mc.x = 400-ball_mc.width/2; speedX = -speedX*0.8; //跳ね返り係数 } //左の壁に当たったとき if (ball_mc.x < 0+ball_mc.width/2) { ball_mc.x = 0+ball_mc.width/2; speedX = -speedX*0.8; //跳ね返り係数 } //天井に当たったとき if (ball_mc.y < 0+ball_mc.height/2) { ball_mc.y = 0+ball_mc.height/2; speedY = -speedY*0.8; //跳ね返り係数 } //地面に当たったとき if (ball_mc.y > 270-ball_mc.height/2) { ball_mc.y = 270-ball_mc.height/2; speedY = -speedY*0.8; //跳ね返り係数 } } } //ボールつかんだ時 var rect:Rectangle = new Rectangle( 15, 15, 370, 240); //ドラッグ領域設定 ball_mc.addEventListener(MouseEvent.MOUSE_DOWN,onDown); function onDown(event:MouseEvent) { pickup = true; ball_mc.startDrag(true,rect); } //ボール離した時 ball_mc.addEventListener(MouseEvent.MOUSE_UP,onUp); function onUp(event:MouseEvent) { pickup = false; ball_mc.stopDrag(); } //ステージ外に移動したときにドラッグ解除 ball_mc.addEventListener(MouseEvent.ROLL_OUT,onUp);
つぎにボールを投げる設定
ボールを離すときと、その直前の位置との差によって投げるスピード、方向を決定
//ボールの初期移動量 var speedX = 5; var speedY = 4; //ボールの古い位置座標 var x2:int; var y2:int; //ボールを持っているかどうか var pickup:Boolean = false; //ボタンモード ball_mc.buttonMode = true; //ボールの動き設定 addEventListener(Event.ENTER_FRAME,ballAction); function ballAction(event:Event):void { //ボールのスピードが一定以下でスピード0に if (Math.abs(speedX) < 0.1) { speedX = 0; } if (Math.abs(speedY) < 0.1) { speedY = 0; } //ボールをつかんで投げる時の設定 if (pickup == true) { //離す時と直前の座標から新たな移動量設定 speedX = (ball_mc.x-x2); speedY = (ball_mc.y-y2); //直前の座標設定 x2 = ball_mc.x; y2 = ball_mc.y; } //ボールをつかんでない時の動きの設定 if (pickup == false) { speedX *= 0.99; //空気抵抗でどんどん遅く speedY = speedY*0.99+0.98; //空気抵抗と重力の設定 ball_mc.x = ball_mc.x+speedX; ball_mc.y = ball_mc.y+speedY; //壁に当たったときの設定 //右の壁に当たったとき if (ball_mc.x > 400-ball_mc.width/2) { ball_mc.x = 400-ball_mc.width/2; speedX = -speedX*0.8; //跳ね返り係数 } //左の壁に当たったとき if (ball_mc.x < 0+ball_mc.width/2) { ball_mc.x = 0+ball_mc.width/2; speedX = -speedX*0.8; //跳ね返り係数 } //天井に当たったとき if (ball_mc.y < 0+ball_mc.height/2) { ball_mc.y = 0+ball_mc.height/2; speedY = -speedY*0.8; //跳ね返り係数 } //地面に当たったとき if (ball_mc.y > 270-ball_mc.height/2) { ball_mc.y = 270-ball_mc.height/2; speedY = -speedY*0.8; //跳ね返り係数 } } } //ボールつかんだ時 var rect:Rectangle = new Rectangle( 15, 15, 370, 240); //ドラッグ領域設定 ball_mc.addEventListener(MouseEvent.MOUSE_DOWN,onDown); function onDown(event:MouseEvent) { pickup = true; ball_mc.startDrag(true,rect); } //ボール離した時 ball_mc.addEventListener(MouseEvent.MOUSE_UP,onUp); function onUp(event:MouseEvent) { pickup = false; ball_mc.stopDrag(); } //ステージ外に移動したときにドラッグ解除 ball_mc.addEventListener(MouseEvent.ROLL_OUT,onUp);
これで投げる動作ができたかと思います
最後に影を追加
新規レイヤーを追加して、ボールのあるレイヤーと枠のレイヤーの間に配置
そこに30×7の楕円を描き、塗りをグラデーションに
中心の色を#000000、端の色を#CCCCCC
それをムービークリップシンボルに変換し、インスタンス名をshadow_mcに
フィルタからぼかし(水平6、垂直6)をかける
影の動きをActionScriptで記述
//ボールの初期移動量 var speedX = 5; var speedY = 4; //ボールの古い位置座標 var x2:int; var y2:int; //ボールを持っているかどうか var pickup:Boolean = false; //ボタンモード ball_mc.buttonMode = true; //ボールの動き設定 addEventListener(Event.ENTER_FRAME,ballAction); function ballAction(event:Event):void { //ボールのスピードが一定以下でスピード0に if (Math.abs(speedX) < 0.1) { speedX = 0; } if (Math.abs(speedY) < 0.1) { speedY = 0; } //ボールをつかんで投げる時の設定 if (pickup == true) { //離す時と直前の座標から新たな移動量設定 speedX = (ball_mc.x-x2); speedY = (ball_mc.y-y2); //直前の座標設定 x2 = ball_mc.x; y2 = ball_mc.y; } //ボールをつかんでない時の動きの設定 if (pickup == false) { speedX *= 0.99; //空気抵抗でどんどん遅く speedY = speedY*0.99+0.98; //空気抵抗と重力の設定 ball_mc.x = ball_mc.x+speedX; ball_mc.y = ball_mc.y+speedY; //壁に当たったときの設定 //右の壁に当たったとき if (ball_mc.x > 400-ball_mc.width/2) { ball_mc.x = 400-ball_mc.width/2; speedX = -speedX*0.8; //跳ね返り係数 } //左の壁に当たったとき if (ball_mc.x < 0+ball_mc.width/2) { ball_mc.x = 0+ball_mc.width/2; speedX = -speedX*0.8; //跳ね返り係数 } //天井に当たったとき if (ball_mc.y < 0+ball_mc.height/2) { ball_mc.y = 0+ball_mc.height/2; speedY = -speedY*0.8; //跳ね返り係数 } //地面に当たったとき if (ball_mc.y > 270-ball_mc.height/2) { ball_mc.y = 270-ball_mc.height/2; speedY = -speedY*0.8; //跳ね返り係数 } } } //ボールつかんだ時 var rect:Rectangle = new Rectangle( 15, 15, 370, 240); //ドラッグ領域設定 ball_mc.addEventListener(MouseEvent.MOUSE_DOWN,onDown); function onDown(event:MouseEvent) { pickup = true; ball_mc.startDrag(true,rect); } //ボール離した時 ball_mc.addEventListener(MouseEvent.MOUSE_UP,onUp); function onUp(event:MouseEvent) { pickup = false; ball_mc.stopDrag(); } //ステージ外に移動したときにドラッグ解除 ball_mc.addEventListener(MouseEvent.ROLL_OUT,onUp); //影の動き設定 shadow_mc.addEventListener(Event.ENTER_FRAME,shadowMove); function shadowMove(event:Event):void { //影の位置設定、ボールの下の地面に常にあるように shadow_mc.x = ball_mc.x; shadow_mc.y = 270; //ボールが上にいくにしたがって影が小さく、うすくなるように shadow_mc.scaleX = shadow_mc.scaleY= ball_mc.y/300; shadow_mc.alpha = ball_mc.y/150; }
これでムービープレビューすると以下のようになってるかと思います
以上ボールを投げるアクションの作り方でした