ボールを投げる 【前編】

throw_ball



ボールを投げるアクションの作り方です
長いので2回に分けていきます
(べ、べつに記事数稼ぐためじゃないんだからね…)
解説はつづきから




新規ファイル作成
ステージ設定はサイズを400×300、フレームレートは30




まずは枠を作成
レイヤー1に画像のような矩形を描き、配置
線の色は#000000



つぎにボールを作成
新規レイヤーを作り、円を作成
線なし、画像のようにグラデーション
中心の色が#FFFFFF、端の色が#666666
サイズは30×30


作成したボールをムービークリップシンボルに変換
インスタンス名をball_mcに


新規レイヤーを作り、ActionScriptを記述
まずはボールの動きから

//ボールの初期移動量
var speedX = 5;
var speedY = 4;

//ボールの動き設定
addEventListener(Event.ENTER_FRAME,ballAction);
function ballAction(event:Event):void {
    ball_mc.x = ball_mc.x+speedX;
    ball_mc.y = ball_mc.y+speedY;
}


このままだと、ボールがどこまでも突き抜けていってしまうので壁で跳ね返る設定を記述

//ボールの初期移動量
var speedX = 5;
var speedY = 4;

//ボールの動き設定
addEventListener(Event.ENTER_FRAME,ballAction);
function ballAction(event:Event):void {
    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;
    }
    //左の壁に当たったとき
    if (ball_mc.x < 0+ball_mc.width/2) {
        ball_mc.x = 0+ball_mc.width/2;
        speedX = -speedX;
    }
    //天井に当たったとき
    if (ball_mc.y < 0+ball_mc.height/2) {
        ball_mc.y = 0+ball_mc.height/2;
        speedY = -speedY;
    }
    //地面に当たったとき
    if (ball_mc.y > 270-ball_mc.height/2) {
        ball_mc.y = 270-ball_mc.height/2;
        speedY = -speedY;
    }
}

それぞれの壁に当たったときに速度を反対方向に
壁にめり込まないようにボール半個分内側に移動
下は地面の分だけ跳ね返る位置を上にずらす


次に重力、空気抵抗、はね返り係数を設定
さらに一定速度以下になったらボールがとまるように設定

//ボールの初期移動量
var speedX = 5;
var speedY = 4;

//ボールの動き設定
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;
    }

    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;    //跳ね返り係数
    }
}


これで大分それらしい動きになったかと思います


次回はこのボールにつかんで投げる動作を加えたいと思います


【後編】へつづく