0

我对 math.random 有一些问题。我为骰子(磁盘)做了一堂课,每件事都很好。有趣的是,当我追踪“var rand”时,我发现它只选择了一个数字。这使得它完全不是随机的。这个函数的原因是,如果这个随机数高于某个数字,例如 90,骰子(磁盘)将转到第 8 帧。但如果随机数停留在一个数字上,它将永远不会发生。一些帮助会很好。

package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.*;
    import flash.utils.*;
    import flash.events.MouseEvent;
    import flash.utils.Timer;
    import flash.utils.getTimer;

    public class DiskRoll extends MovieClip 
    {

        var rand:int = Math.random() * 100;
        var diskTilt:Timer = new Timer(1350,1);     

        public function DiskRoll():void 
        {           
            stage.addEventListener(MouseEvent.MOUSE_DOWN, hitDisk);
            diskTilt.addEventListener(TimerEvent.TIMER_COMPLETE, onComplete);
        }

        private function hitDisk(event:MouseEvent):void{
            this.gotoAndStop(Math.ceil(Math.random()* 7));

            if(rand >= 95 && rand <=100){ 
                this.gotoAndStop(8);
            }

            trace(rand);
            stage.removeEventListener(MouseEvent.MOUSE_DOWN, hitDisk);
            diskTilt.start();

        }

        private function onComplete(event:TimerEvent):void {
            this.gotoAndPlay(1);
            diskTilt.stop();
            stage.addEventListener(MouseEvent.MOUSE_DOWN, hitDisk);
        }

    }

} 
4

1 回答 1

2

rand不会在您的函数中重新计算,这就是为什么它始终具有相同的值。

我不明白为什么你gotoAndStop是一个随机值并保留这个rand变量......你可能想要执行以下操作

private function hitDisk(event:MouseEvent):void{
    rand = Math.random() * 100;

    if(rand >= 95 && rand <=100){ 
        this.gotoAndStop(8);
    }

    trace(rand);
    stage.removeEventListener(MouseEvent.MOUSE_DOWN, hitDisk);
    diskTilt.start();

}

这些是真正的基本编码注意事项,请在尝试通过感觉编码之前阅读一些有关 OOP 和 AS3 的文档。

于 2013-05-29T08:28:38.520 回答