数学随机在动作脚本3

时间:2017-04-22 05:00:33

标签: actionscript-3 flash

我正在制作游戏,我正在尝试创建一个落在多个位置的同一个对象的数组。我也想让他们落在不同的地方,使用数学随机。我遇到的问题是对象(香蕉)根本不会出现在屏幕上。可以在动作脚本3中的y轴上随机使用数学吗?如果是这样,有人会举个例子吗? 这就是我在主程序中所拥有的:

var numBananas = 20;
var theBananas: Array = new Array();
theBananas = [];
for (var i = 0; i < numBananas; i++) {
var aBanana: banana_fall = new banana_fall();
aBanana.y=-10;
theBananas.push(aBanana);
theBananas[i].setSpeed(-(Math.random()), 5);

这就是我在动作脚本类中所拥有的:

package {
    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.events.Event;

    public class banana_fall extends MovieClip {

        var velX: Number = 0;
        var velY: Number = 0;
        var falling: Boolean = false;
        var gravity: Number = 2;

        public function banana_fall() {
            var timing: Timer = new Timer(20, 0);
            timing.addEventListener(TimerEvent.TIMER, moveMe);
            timing.start();

        }

        private function moveMe(event: TimerEvent) {
            this.x = this.x + velX;
            this.y = this.y + velY;

            if (falling) {
                falling=true;
                velY = velY + gravity;
            }
        }


        public function setSpeed(dx, dy) {
            velX = dx;
            velY = dy;
        }

    }

}

1 个答案:

答案 0 :(得分:4)

我认为问题出在这个方法中:

    private function moveMe(event: TimerEvent)
    {
        this.x = this.x + velX;
        this.y = this.y + velY;

        if (falling)
        {
            falling=true;
            velY = velY + gravity;
        }
    }

您设置负速度,下降最初为 false ,因此重力永远无效。你的香蕉去了香蕉,它们出现在屏幕上方,然后逃到负面 y 的空地上。

作为一般规则,您需要跟踪(...)事物以了解问题所在。此外,没有必要在类方法中明确使用 this

    private function moveMe(event: TimerEvent)
    {
        x += velX;
        y += velY;

        if (falling) velY += gravity;

        trace("[BANANA] position:", x, y, "speed:", velX, velY);
    }