Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何随机选择每个对象。Y不在舞台上_Actionscript 3 - Fatal编程技术网

Actionscript 3 如何随机选择每个对象。Y不在舞台上

Actionscript 3 如何随机选择每个对象。Y不在舞台上,actionscript-3,Actionscript 3,每次对象(1.y)超出舞台时,我都尝试随机选择一个对象(2)。但问题是,它不断移动,有时它“跳”到我想要改变的位置。 我确实尝试了“if(road1.y>=stage.stageHeight){”,但它并没有触发。 当我这样做的时候,动作的速度只有在它已经在舞台上两次的时候才会触发。 所有电影剪辑的注册点都在左上角。 代码是这样的 private var road1,road4:Road1; private var road2:Road2; private var road3:R

每次对象(1.y)超出舞台时,我都尝试随机选择一个对象(2)。但问题是,它不断移动,有时它“跳”到我想要改变的位置。 我确实尝试了
“if(road1.y>=stage.stageHeight){”
,但它并没有触发。 当我这样做的时候,动作的速度只有在它已经在舞台上两次的时候才会触发。 所有电影剪辑的注册点都在左上角。 代码是这样的

private var road1,road4:Road1;
    private var road2:Road2;
    private var road3:Road3;
    private var randomRoad:Sprite = new Sprite();
    private var offset:Number = 0;
    private var counter:Number = 0;


public function onAdded(e:Event):void {
        removeEventListener(Event.ADDED_TO_STAGE,onAdded);
        addChild(road1=new Road1());
        addChild(randomRoad);
        addChild(road4=new Road1());
        addEventListener(Event.ENTER_FRAME, onEnterFrame);
    }

    public function onEnterFrame(e:Event):void {


        if (startRandom == true) {
            if (Math.random() > 0.5) {
                randomRoad.addChild(road2 =new Road2());
            } else {
                randomRoad.addChild(road3 =new Road3());
            }
            startRandom = false;
            trace(randomRoad);
            trace(startRandom);
        }

        if (road1.y >= stage.stageHeight) {
            startRandom = true;
            trace("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz");
        }

        offset +=  speed;
        counter++;
        road1.y = offset % 800 - 800;
        randomRoad.y = road1.y + road1.height;
        road4.y = randomRoad.y + randomRoad.height;

    }

舞台的高度是多少?800?也许问题在于道路1.y永远不会大于-1;

试试这个:

if (road1.y >= -speed) {
    startRandom = true;
    trace("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz");
}

根据行驶距离生成对象不是更符合逻辑吗?这样就不依赖于确定给定道路相对于屏幕的y位置

我假设你在这个游戏中有一辆车,因为有路。给车一个距离变量,然后根据速度增加这个变量

distance += speed;
if (distance > 400)
{
    spawnObject();
    distance = 0; // reset the distance traveled.
}
编辑:
我想我可能误解了你想要做的事情,因为我以为你想在路边生成物体,这是一种确定何时生成它们的方法。在重新阅读时,你试图生成的“物体”似乎是下一个路标本身。在你的任务中使用“道路”这个词会更好与“对象”相对的离子(2)“

舞台高度为400,道路1,2,3也有400高度。我认为道路1.y超出/低于舞台高度。舞台高度原因我在MC中添加了一条红线,我可以看到它超过400并下降。因此道路1.y>=舞台高度永远不会触发,因为道路1.y=偏移量%800-800;始终生成小于零的值。(偏移量%800产生范围[0..799],如果偏移量为正数)。所以在更坏的情况下,road1.y将是-800px,randomRoad.y将是-400px,road4.y将是0px;我知道了,但是如果'if(road1.y>=stage.stagehHeight){`不做这个工作,我像'if(road1.y>=速度)那样做吗{`因为我现在就这样做,每次都会触发,但这很奇怪。我想如果我在课后改变速度,这将是唯一的方法。速度的值是什么?为什么使用这个:(偏移量%800-800)?为什么你想让road1.y在舞台之外,roady.y的y位置的边界是什么?速度的值是atm 3(但它会像每100-200帧一样上升),所以它会以3px每秒向下移动。我在做偏移量%800-800,这样我就可以使道路从一个路段平滑过渡到另一个路段(例如,如果您正在驾驶,从当地道路行驶400英里后,您会跳到高速公路上).我想让道路1.y走到外面,这样新的路段就会移动,形成移动道路的幻觉。希望这对你来说是有意义的。是的,这似乎是合乎逻辑的,但如果我想简单一点,不是更难吗?我的意思是,我将不得不使用一个等式。它会是(yFinal-yStart>=400然后做点什么),或诸如此类的事情我更新了答案。如果你在做游戏,你真的无法逃避做某种等式我不得不想象
distance>400
将是你遇到的最简单的解决方案之一。抱歉误解。我认为高层次的方法是这里最大的问题。考虑到这种方法,公认的答案会起作用。是的,我确实想出了同样的办法:D但我觉得这不是正确的解决方案,因为我担心如果速度超过某一点,则不会触发:S@user2422650,为什么?我认为这是一个正确而简单的解决方案。然而,这并不是最好的解决方案。是的,现在,当我尝试它时,即使是在种子期,比如50,它也不会给我任何错误,它每次都会触发,所以你是对的