1

私は、プレイヤーの目的がゲームで可能な限り遠くまで到達することである水平横スクロールゲームを作成しています。ゲームをプレイするには、プレイヤーは地面に置かれたオブジェクト (岩) を飛び越える必要があります。彼はまた、ステージの上部からぶら下がっているオブジェクト (氷) を、これらの氷のオブジェクトに向けてオブジェクト (今のところボール) を撃って破壊する必要があります。ゲームのジャンプ部分を機能させることができましたが、プレイヤーに氷のオブジェクトを破壊させるのに苦労しています。

氷のオブジェクトは、for ループと数学の乱数を使用して、ステージ上のコンテナーに配置されるムービークリップです。プレイヤーは、これらの氷のオブジェクトにオブジェクトを撃って破壊することができます。プレイヤーのボールが氷のオブジェクトに当たったときにアクティブになる機能を作成しました。どちらのオブジェクトもヒットすると消えるため、コンテナから削除する必要があります。この関数は、当たった氷のオブジェクトとプレイヤーがステージから発射したボールの両方を取り除くように見えます。ただし、両方のオブジェクトはまだコンテナ内にあるため、表示されません。プレイヤーが氷のオブジェクトにぶつかって死ぬことを可能にします。プレイヤーが発射した (目に見えない) ボールも移動し続け、コンテナ内でスポーンされているすべての氷のオブジェクトを破壊し、プレイヤーが見る前にすべての氷のオブジェクトを破壊します。

氷のオブジェクトを生成して移動させ、右から左にスクロールするコードは次のとおりです。

/*placing ice objects in container cave*/

var k:int = 0;
var p:MovieClip;
for (k=0; k<=50; k++)
{
    var scalexwaarde = Math.random();
    if (scalexwaarde<0.4)
    {
        scalexwaarde = 0.4;
    }
    else if (scalexwaarde>0.8)
    {
        scalexwaarde = 0.8;
    }

    var scaleywaarde = Math.random();
    if (scaleywaarde<0.3)
    {
        scaleywaarde = 0.3;
    }
    else if (scaleywaarde>0.9)
    {
        scaleywaarde = 0.9;
    }
    var rndm:int = (Math.floor(Math.random()*100))+1;
    p = new ice();
    cave.addChild(p);
    p.y = 230;
    p.scaleX = scalexwaarde * 1.1;
    p.scaleY = scaleywaarde * 1.1;
    p.x = 800 + (220 * rndm);
    p.addEventListener(Event.ENTER_FRAME, move_ice);
    p.addEventListener(Event.ENTER_FRAME, raakSnot);
    p.addEventListener(Event.ENTER_FRAME, raken);
}

/*function for moving ice objects*/

var snelh:int = 9;
function move_ice(e:Event):void
{
    e.target.x -=  snelh;
}

プレイヤーが発射できるオブジェクトを作成して動かすためのコード:

/*creating the object*/
var s:MovieClip = new sneeze(); 

/*if the space is clicked, add to container cave*/
if (evt.keyCode == Keyboard.SPACE) // sneeze when pressed
    {
            cave.addChild(s);
            s.x = n.x;
            s.y = n.y;
            s.addEventListener(Event.ENTER_FRAME, niezen);
    }

/*making player object move and define speed*/
var snelhsneeze:int = 15;
function niezen(evt:Event):void
{
    evt.target.x +=  snelhsneeze;
}

任意のオブジェクトのヒットを処理するためのコード:

/*function that switches to game over screen when
the player hits an object.*/

function raken(evt:Event):void
{
    if (evt.target.hitTestPoint(n.x - 15,n.y,false) == true)
    {
        gotoAndStop(5);
        grondGeraakt = false;
        scrollSpeed = 0;
        speed = 0;
        snelh = 0;

        while (cave.numChildren)
        {
            cave.removeChildAt(0);
        }
    }
    else if (grondGeraakt == false)
    {

    }
}

氷のオブジェクトのヒットテストを処理するためのコード (ここで問題):

/*FUNCTION THAT IS GIVING PROBLEMS*/
/*function activated when ball object hits ice object*/

function raakSnot(evt:Event)
{
    if (evt.target.hitTestPoint(s.x,s.y-15,false) == true) 
    {
        if(s.parent) // remove child s and its events (ball object)
        {
            s.parent.removeEventListener(Event.ENTER_FRAME, niezen);
            s.parent.removeChild(s);
        }
        if(MovieClip(evt.target).parent) // remove ice object and its events
        {
            MovieClip(evt.target).parent.removeEventListener(Event.ENTER_FRAME, raken);
            MovieClip(evt.target).parent.removeChild(MovieClip(evt.target));
        }
    }
}

何が問題なのか本当にわからないので、問題に関するヘルプをいただければ幸いです。前もって感謝します!

4

1 に答える 1