【问题标题】:AS3 Calling Math.random in a scene?AS3 在场景中调用 Math.random?
【发布时间】:2013-02-25 16:19:08
【问题描述】:

所以,我正在尝试制作一个小行星随机移动的游戏,但是当我将 Math.random 函数放在我的函数之外时,它只给出 1 次值,并且每次小行星 = 0 时都不会重复. 如果我把它放在我的函数中,它只会不断更新并让我的小行星随机飞来飞去。有什么帮助吗? 编辑:对不起,如果我不清楚,我整晚都没有睡。我想让我的小行星在屏幕上的随机路径上移动,然后随机选择另一条路径并在该路径上移动,这应该在每次 x>1024 和 y>768

时发生
import flash.events.Event;
addEventListener(Event.ENTER_FRAME, massGain);
stop();

var math1:Number = Math.floor(Math.random()*20-10);
trace(math1);

function massGain(e:Event)
{


Mouse.hide();

Cosmo.x = mouseX;
Cosmo.y = mouseY;

Asteroid5.x = Asteroid5.x + math1;
Asteroid5.y = Asteroid5.y + math1;
if(Asteroid5.x >1024){
Asteroid5.x = 0;
}
if(Asteroid5.y > 768){
Asteroid5.y = 0;
}



}

【问题讨论】:

  • 你想达到什么目的,我没看懂你想达到什么目的?
  • 对不起,如果我不清楚,我已经整晚没睡了。我想让我的小行星在屏幕上的随机路径上移动,然后随机选择另一条路径并在该路径上移动,这应该在每次 x>1024 和 y>768 时发生
  • 所以你想要平滑的移动,并且每当它接触到屏幕的末端时,它就会开始另一个随机的移动路径?
  • 没错。它应该直线移动,没有曲线或跳跃或任何东西。
  • 好的明白了,我来写代码,等等。

标签: actionscript-3 math random


【解决方案1】:

用这个!

import flash.events.Event;
addEventListener(Event.ENTER_FRAME, massGain);
stop();

// random value to start of with
var math1:Number = Math.floor(Math.random()*10);//20-10 doesnt make sense .. its 10

function massGain(e:Event)
{
        Mouse.hide();

        Cosmo.x = mouseX;
        Cosmo.y = mouseY;


        if(Asteroid5.x >1024){
        Asteroid5.x = 0;
        math1 = Math.floor(Math.random()*10);// new random Value
        trace(math1);
        }
        if(Asteroid5.y > 768){
        Asteroid5.y = 0;
        math1 = Math.floor(Math.random()*10);// new random Value
        }

        Asteroid5.x = Asteroid5.x + math1;
        Asteroid5.y = Asteroid5.y + math1;

}

【讨论】:

  • 啊,酷!我的主要困惑来源是我是否可以多次调用我的 1 数学函数并获得不同的数字,或者我是否必须多次编写。这回答了我的问题,谢谢!
  • NP。然后请标记为正确答案,这就是本网站的运作方式。
  • 哦,肯定的(对不起,我还是个新手。)
  • 还有一个问题,我将如何修改数学。随机码,所以随机数也可以是负数,这样小行星不只是来自屏幕的左侧?
  • 在此处使用此功能 postet -> stackoverflow.com/questions/4926662/…
【解决方案2】:
import flash.events.Event;
addEventListener(Event.ENTER_FRAME, massGain);
stop();

var speedX = Math.floor(Math.random()*20-10);
var speedY = Math.floor(Math.random()*20-10);

function massGain(e:Event)
{


Mouse.hide();

Cosmo.x = mouseX;
Cosmo.y = mouseY;

Asteroid5.x = Asteroid5.x + speedX;
Asteroid5.y = Asteroid5.y + speedY;
if(Asteroid5.x >1024||Asteroid5.x<0){
speedX = -speedX;
}
if(Asteroid5.y > 768||Asteroid5.y<0){
speedY = -speedY;
}
}

试试这个。

【讨论】:

  • @user2072135 并没有真正随机化,但是只要对象碰到角落,它就会立即弹回。速度值将保持不变,方向将改变。如果您想要更多随机值,可以在 if 语句中调用 Math.random,就像其他回答者的建议一样。
  • 另外,这个答案对于 x 和 y 都有一个随机的速度向量,而不是在原始代码中两者都有一个向量,这大大增加了可变性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 2014-03-27
  • 1970-01-01
  • 2014-08-02
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多