Step 8:バーを動かす
次に、ボールを打ち返すバーがタッチ操作に従って動くようにします。画面内での指の動きは、touchMoveイベントで検知します。
画面の背景であるBgにtouchMoveイベントを登録するため、ja.imageUnitObj["Bg"].addEventListener("touchUp", this); の後に、以下を追加します。
ja.imageUnitObj["Bg"].addEventListener("touchMove", this);
イベント発生時に実行するtouchUpメソッドには、バーの位置を指の動きに追従させる処理を書きます。this.touchUp = function(){}の後に、以下を追加します。
this.touchMove = function(e)
{
barObj.x = e.touch_x - 50;
}
引数のeには指の動きのイベントオブジェクトが格納されています。e.touch_xでタッチされている位置のx座標を取得でき、e.touch_yでy座標を取得できます。バーの原点は左上にあり幅は100ピクセルですので、指の位置をバーの中心にするために半分の長さの50ピクセル分を引いています。
Step 9:バーでボールを跳ね返す
ボールをバーで跳ね返えす処理を加えます。this.onEnterFrame = function(){} 内の if(boxObject.x >= 300)の前に以下を追加します。
if(ja.hitObj.intersect(boxObject , barObj))
{
boxObject.y = barObj.y - boxObject.h - 1;
yinc = -yinc;
}
if(ja.hitObj.intersect(boxObject , barObj)) でボールとバーの衝突を判定し、ボールとバーが衝突していたらボールとバーを完全に離してボールの向きを反転させます。
ここまでの処理をまとめたのがサンプル8です。
■サンプル8[Main.js](実行画面)
Main = function()
{
var boxObject = new ja.BoxClass(20,20,"#000000"); //ブロックを崩すボールを描画します。
boxObject.x = 150; //ブロックを位置を指定します。
boxObject.y = 200;
var barObj = new ja.BoxClass(100,15,"#000000"); //自分の指で動かすを描画します。
barObj.x = 110; //バーを位置を指定します。
barObj.y = 350;
var xinc = 15; //フレームごとにボールを動かすx方向のピクセル数です。
var yinc = 15; //フレームごとにボールを動かすy方向のピクセル数です。
//このゲームで使用する画像の準備をします。
ja.imageUnitObj.addEventListener("onLoad", this); //imageObjがonLoadされたらthisのonLoadを実行します。
ja.imageUnitObj.load(["Image/Bg.png", "Image/block.png"]); //画像を読み込みます。
var blockContainer = new ja.Container(); //表示させるブロックをまとめておくオブジェクトを生成します。
//画像が読み込み終わったあとに以下が実行されます。
this.onLoad = function()
{
window.scrollTo(0, 1); //アドレスバーを消します。
ja.imageUnitObj.removeEventListener("onLoad", this); //onLoadは既に呼ばれたのでリスナーを解除します。
ja.stage.addChild(ja.imageUnitObj["Bg"]); //読み込んでおいた画像を表示させます。
ja.stage.addChild(boxObject); //ボールを表示させます。
ja.stage.addChild(barObj); //バーを表示させます。
ja.stage.addChild(blockContainer); //ブロックをまとめておくオブジェクトを表示します。
//ブロックを表示させます。
var x = 10;
for(var i = 0 ; i < 5 ; i++)
{
var y = 0;
for(var j = 0 ; j < 3 ; j++)
{
var block = new ja.ImageClass(ja.imageUnitObj["block"]); //ブロックを生成します。
block.x = x;
block.y = y;
blockContainer.addChild(block); //ブロックを表示させます。
y += block.h + 10; //Y方向に表示位置をずらします。
}
x += block.w + 10; //X方向に表示位置をずらします。
}
//タッチしたときの命令を追加します。
ja.imageUnitObj["Bg"].addEventListener("touchUp", this);
ja.imageUnitObj["Bg"].addEventListener("touchMove", this);
}
//touchUpは画面から指が離れた瞬間に呼ばれます。
this.touchUp = function()
{
ja.imageUnitObj["Bg"].removeEventListener("touchUp", this);
boxObject.addEventListener("onEnterFrame" , this); //タッチが離れた瞬間にゲームをスタートさせます。
}
//バーを動かします。
this.touchMove = function(e)
{
barObj.x = e.touch_x - 50;
}
//ゲームスタート後、1秒間に10回この命令が呼ばれます。
this.onEnterFrame = function(){
//毎回のそれぞれの増加量を設定します。
boxObject.x += xinc;
boxObject.y += yinc;
//当たり判定を使ってブロックを崩します。
for(var i = 0 ; i < blockContainer.numChildren() ; i++) //blockContainerに残っているブロックの数だけ処理を繰り返します。
{
var blockObj = blockContainer.getChildAt(i); //blockContainerからブロックをひとつ指定します。
if(ja.hitObj.intersect(boxObject,blockObj)) //ボールとブロックが衝突しているかを判定します。
{
blockContainer.removeChildAt(i); //ブロックを取り除きます。
yinc = -yinc; //方向を反転させます。
break;
}
}
/***追加部分***/
//当たり判定を使ってボールをバーで跳ね返らせます。
if(ja.hitObj.intersect(boxObject , barObj))
{
boxObject.y = barObj.y - boxObject.h - 1; //一度衝突したら完全にバーとボールを離します。
yinc = -yinc; //方向を反転させます。
}
/***追加部分***/
//ボールが壁に衝突したときに方向を変化させます。
if(boxObject.x >= 300)
{
boxObject.x = 300;
xinc = -xinc;
}
else if(boxObject.x <= 0)
{
boxObject.x = 0;
xinc = -xinc;
}
if(boxObject.y <= 0)
{
boxObject.y = 0;
yinc = -yinc;
}
else if(boxObject.y >= 460)
{
boxObject.y = 460;
yinc = -yinc;
}
}
}