1

我一直在用 Flash CS5 开发这个简单的汽车游戏。汽车必须避免汽车垂直行驶并捡起硬币。我有三种类型的硬币,它们在被捡起时会增加 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 并检查第一次命中。硬币问题发生的原因是硬币没有击中一次,它击中了一段时间,因为您移动它的每一帧并且随着移动它再次击中。所以你必须检查它并做出正确的“if-else”条件。

于 2012-12-13T09:21:49.560 回答
0

有一个比您决定使用的解决方案更好的解决方案。spex 是您用来滚动游戏的变量。当您在汽车上运行 hitTestObject 时,只需输入 spex = 0; 这将使游戏停止。

我同意 mitim 将 removeChild() 用于硬币,而不是仅仅将它们堆放在舞台上。

于 2013-05-12T23:56:54.460 回答