使用 arc4random_uniform 和 cocos2d-x
Using arc4random_uniform with cocos2d-x
自 iOS 以来,我很高兴使用 arc4random_uniform,也很高兴 cocos2d-x 的 iOS 个目标。
事实证明它不适用于 Android。错误:
error: 'arc4random_uniform' was not declared in this scope
我该如何解决这个问题?
最坏的情况,在编译时我会检查 arc4random_uniform() 是否存在,如果不存在,则使用其他方法(如旧的 arc4random()...)。
我真的很想避免在这里为不同的目标使用不同的代码库。
还有其他建议吗?
注意:由于 cocos2d-x 是 "one code"→"many platforms",将此问题委托给 Android 的 Java 代码将不利于此。
您可以在 ios 中使用的某些 C++ 库在 Android 中不可用。
不幸的是,arc4ramndom 只是其中之一。
所以唯一的方法是使用 stdlib 的替代品,如 std::rand()
或默认的随机引擎,如果你想要更多的话。
这是一个关于如何使用 std::default_random_engine
在给定区间内获取随机值的示例。
int randomValue(int from, int to) {
std::random_device rd;
std::default_random_engine e1(rd());
std::uniform_int_distribution<int> uniform_dist(from, to);
int mean = uniform_dist(e1);
return mean;
}
您可以使用 Cocos2d 本机方法生成随机数。 CCRANDOM_0_1()
例如生成一个介于 0 和 1 之间的随机 CGFloat。
自 iOS 以来,我很高兴使用 arc4random_uniform,也很高兴 cocos2d-x 的 iOS 个目标。
事实证明它不适用于 Android。错误:
error: 'arc4random_uniform' was not declared in this scope
我该如何解决这个问题?
最坏的情况,在编译时我会检查 arc4random_uniform() 是否存在,如果不存在,则使用其他方法(如旧的 arc4random()...)。 我真的很想避免在这里为不同的目标使用不同的代码库。
还有其他建议吗?
注意:由于 cocos2d-x 是 "one code"→"many platforms",将此问题委托给 Android 的 Java 代码将不利于此。
您可以在 ios 中使用的某些 C++ 库在 Android 中不可用。 不幸的是,arc4ramndom 只是其中之一。
所以唯一的方法是使用 stdlib 的替代品,如 std::rand()
或默认的随机引擎,如果你想要更多的话。
这是一个关于如何使用 std::default_random_engine
在给定区间内获取随机值的示例。
int randomValue(int from, int to) {
std::random_device rd;
std::default_random_engine e1(rd());
std::uniform_int_distribution<int> uniform_dist(from, to);
int mean = uniform_dist(e1);
return mean;
}
您可以使用 Cocos2d 本机方法生成随机数。 CCRANDOM_0_1()
例如生成一个介于 0 和 1 之间的随机 CGFloat。