对象在Flash actionscript 3.0中随机生成

时间:2014-05-29 04:45:04

标签: actionscript-3

我正在创造一种羊需要跳跃或蹲伏以避开障碍物的游戏。 我创造了两种类型的障碍物,但它们以恒定的速度出现。 有时两个障碍聚集在一起使得无法避免。有没有办法改变这个? 我能否以随机的速度随机进入2个障碍?这是我的代码。

    hole_mc.visible = false;
bird_mc.visible = false;

playhotarea_btn.addEventListener(MouseEvent.CLICK, removeInstructionBox);

function removeInstructionBox(event:MouseEvent):void
{
    playhotarea_btn.removeEventListener(MouseEvent.CLICK, removeInstructionBox);
    instructionbox_mc.visible = false;
    instructiontext_mc.visible = false;
    playbtn_mc.visible = false;
    playbtntext_mc.visible = false;
    sheep_mc.sheepIN_mc.visible = false;
    sheep_mc.gotoAndPlay("sheepwalk");
    treebg_mc.gotoAndPlay("bgloop");
    hole_mc.visible = true;
    bird_mc.visible = true;
    timer.start();
}


hole_mc.addEventListener(Event.ENTER_FRAME, holeMove);

function holeMove(event:Event):void {
    if (hole_mc.x>= -200) {
        hole_mc.x -=7;
    }else{
        hole_mc.x=1080;
        trace("hole loops");
    }
}

bird_mc.addEventListener(Event.ENTER_FRAME, birdMove);

function birdMove(event:Event):void {
    if (bird_mc.x>= -200) {
        bird_mc.x -=10;
    }else{
        bird_mc.x=1080;
        trace("bird loops");
    }
}

stage.addEventListener(Event.ENTER_FRAME, hitHole);

function hitHole(event:Event):void{
    if (sheep_mc.hitTestObject(hole_mc)){
        gotoAndStop("GameOver");
        hole_mc.removeEventListener(Event.ENTER_FRAME, holeMove);
        stage.removeEventListener(Event.ENTER_FRAME, hitHole);
        bird_mc.removeEventListener(Event.ENTER_FRAME, birdMove);
        stage.removeEventListener(Event.ENTER_FRAME, hitBird);
    }
}

stage.addEventListener(Event.ENTER_FRAME, hitBird);

function hitBird(event:Event):void{
    if (sheep_mc.hitTestObject(bird_mc)){
        gotoAndStop("GameOver");
        bird_mc.removeEventListener(Event.ENTER_FRAME, birdMove);
        stage.removeEventListener(Event.ENTER_FRAME, hitBird);
        hole_mc.removeEventListener(Event.ENTER_FRAME, holeMove);
        stage.removeEventListener(Event.ENTER_FRAME, hitHole);
    }
}


var currentSecond:Number = 0; 
var delay:Number = 1000; 
var timer:Timer = new Timer(delay);

timer.addEventListener(TimerEvent.TIMER, timerEventHandler);

function timerEventHandler(event:TimerEvent):void
{
   currentSecond++; 
   trace(currentSecond);
   score_txt.text = String(currentSecond + " s");
}

`

1 个答案:

答案 0 :(得分:0)

你总是可以通过测试"碰撞"来避免在同一个地方产生东西。在创建(或在您的情况下,移动)新对象之前。您应该在任何类中进行测试,并引用屏幕上的所有对象。在这种情况下,您发布的类具有对孔和鸟的引用,这两个对象是您不希望具有相同x值的对象。

尝试以下方面的内容:

function birdMove(event:Event):void {
if (bird_mc.x>= -200) {
    bird_mc.x -=10;
}else{
    if(hole_mc.x > 1000){ // See notes below
        bird_mc.x=1080;
        trace("bird loops");
    }}}

我假设您希望在两个障碍物之间留出一点空间。如果您只是担心它们彼此完全相同,那么您可以使用if hole_mc.x = 1080.但是使用>一些数字,你可以保证他们之间的一点空间。

你也应该在挖洞机上添加一条类似的线,这样哪个线圈首先被召唤起来并不重要。他们都在重生之前检查。