您好,登錄后才能下訂單哦!
今天在項目中用到了隨機數,但發現cocos2d-x中宏CCRANDOM_0_1提供的都是非常有規律的隨機數,后來上網查資料的值,產生隨機數的函數rand需要一個“種子”,默認情況下,該種子的值是不變的,因此每次程序運行,我們都會看到,它所產生的一組隨機數都是和上次的一樣的,那么為了能夠產生真隨機數,我們就必須來動態的修改該種子的值,該過程可通過srand(unsigned int speed)函數實現,具體實現過程如下:
這里直接把它寫成一個函數方便調用
static float myRand_0_1()
{
cc_timeval psv;
CCTime::gettimeofdayCocos2d( &psv, NULL ); // 獲取本地時間
//根據時間產生隨機種子
//(這里加上一個rand函數,可解決在循環內(時間間隔極短)取隨機數時,
//連續取得的幾個值相同的問題)
unsigned int tsrans = psv.tv_sec * 1000 + psv.tv_usec / 1000 + rand();
srand(tsrans); //設定隨機數種子
return CCRANDOM_0_1();
}
這里補充一點:
c語言里函數rand()和srand()的用法:
rand(void)用于產生一個偽隨機unsigned int 整數。
srand(seed)用于給rand()函數設定種子。
srand 和 rand 應該組和使用。一般來說,srand 是對 rand 進行設置。比如:
srand((UINT)GetCurrentTime());
int x = rand() % 100;
是生成 0 到 100 之間的隨機數。
srand()是用來初始化隨機種子數的,因為rand的內部實現是用線性同余法做的,他不是真
的隨機數,只不過是因為其周期特別長,所以有一定的范圍里可看成是隨機的,式子如下:
rand = rand*const_1 + c_var;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。