こんにちは、スペースインベーダーに似たゲームを作成しようとしましたが、hitTestObject を作成するのが難しいことがわかりました。そのため、エイリアンブレットが mc_gun に命中すると、プレイヤーはライフを失い、失われた 3 つのライフがゲームオーバーになり、名前を入力してハイスコアテーブルに参加できる画面。
私はまだ次のことをしなければなりませんが、どこから始めればよいかわかりません...
プレイヤーのライフを 3 つ作成します。すべてのライフがなくなったらエンドゲーム。名前画面に入るとハイスコアテーブル。
どんな助けでも大歓迎です。
ドキュメントの本文にある私のコーディングは次のとおりです...
stop();
var score:Number = 0;
var livesLeft:Number = 3;
var lifesArray:Array = new Array();
lifesArray.push(life1);
lifesArray.push(life2);
lifesArray.push(life3);
addEventListener(Event.ENTER_FRAME, pulse);
function pulse(event:Event):void
{
checkForHitOnGun();
checkForHitOnAliens();
checkForBulletOnBulletHit();
//checkEndGameCondition
}
function checkForHitOnGun()
{
for (var i=0; i<numChildren; i++)
{
if (getChildAt(i) is alienbullet)
{
var mc_alienbullet:MovieClip = getChildAt(i) as MovieClip;
for (var j=0; j<numChildren; j++)
{
if (getChildAt(j) is gun)
{
var mc_gun:MovieClip = getChildAt(j) as MovieClip;
if (mc_alienbullet.hitTestObject(mc_gun))
{
health -= 10;
if (health<1){
if(livesLeft<1){
gotoAndPlay(2);
removeChild(mc_gun);
stage.removeEventListener(Event.ENTER_FRAME,pulse);
}
livesLeft--;
lifesArray[livesLeft].visible = false;
health=100;
if (livesLeft == 0){
(endGo);
gotoAndPlay(2);
}
}
trace("health =" +health);
}
}
}
}
}
}
function checkForHitOnAliens()
{
for (var i=0; i<numChildren; i++)
{
if (getChildAt(i) is bullet)
{
var mc_bullet:MovieClip = getChildAt(i) as MovieClip;
for (var j=0; j<numChildren; j++)
{
if (getChildAt(j) is alien)
{
var mc_alien:MovieClip = getChildAt(j) as MovieClip;
if (mc_bullet.hitTestObject(mc_alien))
{
var tobeDestroyed:MovieClip;
if (mc_alien.x > mc_bullet.x)
{
tobeDestroyed = mc_alien;
}
else
{
tobeDestroyed = mc_alien;
}
var bomb_mc:explosion = new explosion();
bomb_mc.x = tobeDestroyed.x;
bomb_mc.y = tobeDestroyed.y;
var addspaceship:alien = new alien();
addspaceship.x = 600;
addspaceship.y = Math.random()*(stage.stageHeight);
tobeDestroyed.destroy();
addChild(bomb_mc);
addChild(addspaceship);
score++;
return;
}
}
tb_score.text = "" + score;
}
}
}
}
function checkForBulletOnBulletHit()
{
for (var i=0; i<numChildren; i++)
{
if (getChildAt(i) is bullet)
{
var mc_bullet:MovieClip = getChildAt(i) as MovieClip;
for (var j=0; j<numChildren; j++)
{
if (getChildAt(j) is alienbullet)
{
var mc_alienbullet:MovieClip = getChildAt(j) as MovieClip;
if (mc_bullet.hitTestObject(mc_alienbullet))
{
var tobeDestroyed:MovieClip;
if (mc_bullet.x > mc_alienbullet.x)
{
tobeDestroyed = mc_bullet;
}
else
{
tobeDestroyed = mc_alienbullet;
}
/*score++;
tb_score.text = "" + score;*/
var bomb_mc:explosion = new explosion();
bomb_mc.x = tobeDestroyed.x;
bomb_mc.y = tobeDestroyed.y;
tobeDestroyed.destroy();
addChild(bomb_mc);
/*if (mc_bullet.hitTestObject(mc_alienbullet))
{
score++;
mc_bullet.gotoAndPlay(2);
}*/
score++;
return;
}
tb_score.text = "" + score;
}
}
}
}
}
//mc_gun would make the bullet fire only if the gun is clicked.
//the game is to difficult so i changed it to stage. to make the whole stage the fireing area.
stage.addEventListener(MouseEvent.CLICK, fire);
function fire(event:MouseEvent):void
{
var bulletfire:bullet = new bullet();
bulletfire.x = mc_gun.x - 20 + mc_gun.width;
bulletfire.y = mc_gun.y;
addChild(bulletfire);
}
mc_banner.addEventListener(MouseEvent.CLICK, startGo);
function startGo(event:MouseEvent):void
{
mc_banner.visible = false;
mc_instructions.visible = false;
mc_highscore.visible = false;
mc_gun.visible = true;
tb_score.visible = true;
addEventListener(Event.ENTER_FRAME, pulse);
var initialspaceship:alien=new alien();
initialspaceship.x = 600;
initialspaceship.y=Math.random()*(stage.stageHeight);
addChild(initialspaceship);
}
function endGo()
{
mc_gun.visible = false;
tb_score.visible = false;
removeEventListener(Event.ENTER_FRAME, pulse);
mc_banner.visible = true;
livesLeft--;
lifesArray[livesLeft].visible = false;
}