加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx-3.x学习笔记二:随机数的生成及注意问题

发布时间:2020-12-14 21:10:45 所属栏目:百科 来源:网络整理
导读:cocos2dx-3.x提供了一个用于生成 【0,1) 之间浮点数的宏定义 CCRANDOM_0_1 1. 宏定义说明 首先查看源码,定位分析: 1 2 3 4 /** @def CCRANDOM_0_1 returns a random float between 0 and 1 */ #define CCRANDOM_0_1() cocos2d::rand_0_1() cocos2d::rand

cocos2dx-3.x提供了一个用于生成【0,1)之间浮点数的宏定义CCRANDOM_0_1


1. 宏定义说明


首先查看源码,定位分析:

1
2
3
4
/** @def CCRANDOM_0_1
returns a random float between 0 and 1
*/
#define CCRANDOM_0_1() cocos2d::rand_0_1()

cocos2d::rand_0_1()函数的原型为:

4
5
6
7
8
9
10
11
12
13
/**
* Returns a random float between 0 and 1.
* It can be seeded using std::srand(seed);
*/
inline float rand_0_1() {
// FIXME: using the new c++11 random engine generator
// without a proper way to set a seed is not useful.
// Resorting to the old random method since it can
// be seeded using std::srand()
return std:: rand () / ( float )RAND_MAX;
// return cocos2d::random(0.f,1.f);
};

从上面的源码可以看出,CCRANDOM_0_1()其实就是调用标准库函数 rand(),随机生成0 - 1,左开右闭区间内的浮点数

?

2. rand函数


标准库函数生成随机数,采用的是rand函数,生成一个【0, RAND_MAX】之间的整数,常用的实例如:

9
#include <time.h>
#include <stdlib.h>
int main()
{
srand ((unsigned int ) time (0)); // 设置随机数种子
printf ( "%dn" , ());
0;
}


3. CCRANDOM_0_1使用


在具体的使用过程中,需要注意两点

1. 初始化随机数种子

2. 注意闭合区间,尤其是生成随机整数时,更需要确保闭合区间,圆括号的使用----> 查看下例中第十行

一个使用例子,用于随机生成0,1两个整数:(int)(CCRANDOM_0_1() * 2)

?

#include "cocos2d.h"
test()
{
struct timeval now;
gettimeofday(&now,NULL); // linux 下获取当前时间,精确到微妙
)(now.tv_sec*1000 + now.tv_usec/1000)); // set random seed
// generate random o or 1
value = ( ) (CCRANDOM_0_1() * 2);
log "value is %dn" value;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读