1

私はFlashCS5でこのシンプルな車のゲームに取り組んできました。車は車が垂直に来るのを避けてコインを拾う必要があります。私は3種類のコインを持っており、拾われると1、2、3のスコアポイントが加算されます。私の問題は、私が車でコインを打つと、それが車を通り抜けて、はるかに多くのポイントを与えることです。ステージから削除するのにも問題があります...これまでのコードは次のとおりです。

var spex:Number = 0;
var spey:Number = 4;
var score:uint;
var cars:Array = new Array  ;
var db:Number = 2;
var db_coins:Number = 1;
var i:Number = 0;
for (i=0; i<=db; i++)
{
    var traffic_mc:MovieClip = new traffic  ;
    cars.push(addChild(traffic_mc));
    cars[i].x = -500 * Math.random();
    cars[i].y = Math.random() * 400;
    trace(cars[i].y);
}

for (i=0; i<=db_coins; i++)
{
    var coin_y:MovieClip = new coin_yellow  ;
    coin_y.x = -500 * Math.random();
    coin_y.y = Math.random() * 400;
    addChild(coin_y);
    var coin_r:MovieClip = new coin_red  ;
    coin_y.x = -500 * Math.random();
    coin_y.y = Math.random() * 400;
    addChild(coin_r);
    var coin_b:MovieClip = new coin_blue  ;
    coin_b.x = -500 * Math.random();
    coin_b.y = Math.random() * 400;
    addChild(coin_b);
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, keydown);
function keydown(k:KeyboardEvent):void
{
    if (k.keyCode == 37)
    {
        spex -=  4;

    }
    if (k.keyCode == 39)
    {
        spex +=  4;
    }
}
stage.addEventListener(Event.ENTER_FRAME, go);
function go(e:Event):void
{
    this.auto.x +=  spex;
    if (this.auto.x < 25)
    {
        this.auto.x = 25;
        spex = 0;
    }
    if (this.auto.x > 286)
{
    this.auto.x = 286;
    spex = 0;
    }
    for (i=0; i<=db; i++)
    {
        if (cars[i].hitTestObject(this.auto))
        {
            trace("GAME OVER");
            stage.removeEventListener(KeyboardEvent.KEY_DOWN, keydown);
            stage.removeEventListener(Event.ENTER_FRAME, go);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, retry);
        }
        cars[i].y +=  spey;
        if (cars[i].y > 600)
        {
            cars[i].y = -50;
            cars[i].x = Math.random() * 251;
        }
    }

    for (i=0; i<=db_coins; i++)
    {
        if (coin_y.hitTestObject(this.auto))
        {
            score +=  1;
            updateScore();
        }
        coin_y.y +=  spey-2;
        if (coin_y.y > 600)
        {
            coin_y.y = -50;
            coin_y.x = Math.random() * 251;
        }
        if (coin_r.hitTestObject(this.auto))
        {
            score +=  2;
            updateScore();
        }
        coin_r.y +=  spey-2;
        if (coin_r.y > 600)
        {
            coin_r.y = -50;
            coin_r.x = Math.random() * 251;
        }
        if (coin_b.hitTestObject(this.auto))
        {
            score +=  3;
            updateScore();
        }
        coin_b.y +=  spey-2;
        if (coin_b.y > 600)
        {
            coin_b.y = -50;
            coin_b.x = Math.random() * 251;
        }
    }
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, retry);
function retry(k:KeyboardEvent):void
{
    if (k.keyCode == 32)
    {
        stage.addEventListener(Event.ENTER_FRAME, go);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keydown);
        for (i=0; i<=db; i++)
        {
            cars[i].y = -300 * Math.random();
            cars[i].x = Math.random() * 251;
        }

        for (i=0; i<=db_coins; i++)
        {
            coin_y.y = -300 * Math.random();
            coin_y.x = Math.random() * 251;
            coin_r.y = -300 * Math.random();
            coin_r.x = Math.random() * 251;
            coin_b.y = -300 * Math.random();
            coin_b.x = Math.random() * 251;
        }
        spex = 0;
        spey = 4;
        score = 0;
        scorecounter.text = "Score: " + score.toString();
    }
}

//Scorecount

function init():void
{
    score = 0;
    scorecounter.text = "Score: " + score.toString();
}

function updateScore():void
{
    scorecounter.text = "Score: " + score.toString();
}

init();
4

2 に答える 2

0

hited:Boolean のような変数を作成し、最初のヒットを確認する必要があると思います。コインの問題が発生するのは、コインが 1 回ヒットしないためです。コインがしばらくヒットしている場合は、フレームを移動するたびにコインが再びヒットします。したがって、それを確認して、適切な「if-else」条件を作成する必要があります。

于 2012-12-13T09:21:49.560 に答える
0

使用することにしたものよりも優れたソリューションがあります。spex は、ゲームのスクロールに使用する変数です。車で hitTestObject を実行するときは、単純に spex = 0; と入力します。これにより、ゲームが停止します。

私は mitim に同意し、単にコインをステージから積み上げるのではなく、コインに removeChild() を使用します。

于 2013-05-12T23:56:54.460 に答える