此处将为大家介绍关于cocos2d-x-产生随机数(c++)的详细内容,并且为您解答有关cocos随机生成怪物的相关问题,此外,我们还将为您介绍关于Cocos2DiOS之旅:如何写一个敲地鼠游戏(二)
此处将为大家介绍关于cocos2d-x - 产生随机数(c++)的详细内容,并且为您解答有关cocos随机生成怪物的相关问题,此外,我们还将为您介绍关于Cocos2D iOS之旅:如何写一个敲地鼠游戏(二):Cocos2D中的高清支持、Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点 出现无法打开包括文件:“cocos2d.h”: No such file or direct、Cocos2d-2.x_使用系统时间来获取随机数、cocos2d-iphone – Cocos2d Box2d或Chipmunk的有用信息。
本文目录一览:- cocos2d-x - 产生随机数(c++)(cocos随机生成怪物)
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(二):Cocos2D中的高清支持
- Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点 出现无法打开包括文件:“cocos2d.h”: No such file or direct
- Cocos2d-2.x_使用系统时间来获取随机数
- cocos2d-iphone – Cocos2d Box2d或Chipmunk
cocos2d-x - 产生随机数(c++)(cocos随机生成怪物)
cocos2d-x提供了一个产生随机数的方法 CCRANDOM_0_1
具体定义如下。
1
2
3
4
|
/** @def CCRANDOM_0_1
returns a random float between 0 and 1
*/
#define CCRANDOM_0_1() ((
float
)rand()/RAND_MAX)
|
可以看出,他是返回一个0~1之间的随机数.
同样的道理,
1. int random = CCRANDOM_0_1()+1; 产生1~2之间的随机数
2. int random =CCRANDOM_0_1()*100; 产生0~100之间的随机数
但是,cocos2d-x采用的是rand()函数,
rand()的用法
rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。这样,如果你要产生0~10的10个整数,可以表达为:
int N = rand() % 11;
这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样:
int N = 1 + rand() % 11;
总结来说,可以表示为:
a + rand() % n
其中的a是起始值,n是整数的范围。 a + rand() % (b-a+1) 就表示 a~b之间的一个随机数若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依此类推。
通常rand()产生的随机数在每次运行的时候都是与上一次相同的,这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用srand( seed )函数进行随机化,随着seed的不同,就能够产生不同的随机数。
所以在处理的时候还可以包含time.h头文件,然后使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒)。
故此,总结来说CCRANDOM_0_1()不随机,建议使用arc4random()这个函数(不需要初始化随机种子,可直接使用)。
另外,说明下,objective-c中生成随机数有三种方法:arc4random(),CCRANDOM_0_1()和random(),具体说明如下: 1)、arc4random() 比较精确不需要生成随机种子 使用方法 : 通过arc4random() 获取0到x-1之间的整数的代码如下: int value = arc4random() % x; 获取1到x之间的整数的代码如下: int value = (arc4random() % x) + 1; 2)、CCRANDOM_0_1() 在cocos2d中使用 ,范围是[0,1] 使用方法: float random = CCRANDOM_0_1() * 5; //[0,5] CCRANDOM_0_1() 取值范围是[0,1] 3)、random() 需要初始化时设置种子 使用方法: srandom((unsigned int)time(time_t *)NULL); //初始化时,设置下随机种子就好了。
Cocos2D iOS之旅:如何写一个敲地鼠游戏(二):Cocos2D中的高清支持
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)
免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!
高清显示和Cocos2D
好吧,有一个好消息 — 在最新版本的Cocos2D中包括了高清屏的完整支持,你可以用下面1-2-3步就可简单搞定!
- 在调用CCDirector的enableRetinadisplay方法在app开始时启用高清支持.如果你使用cocos2D项目模板,你只需要在app delegate中在那一行去掉注释即可.
- 增加高清精灵到你的app中,但是不是使用”@2x”后缀,而是为cocos2D使用”-hd”后缀.当你加载精灵的时候,在普通屏将使用普通图片,在高清屏Cocos2D将在高清屏自动为你加载高清图片.
- 现在你可以在Cocos2D中使用点来代替像素来定位了.注意一些APIs(但不是很多)任然必须以像素处理 — 当在这种情况下,它们的名称中将带有像素字眼,否则一律一点来处理.
在一般情况下,最容易的事是制作一张最高分辨率的图片(比如高清屏下的2X大小),然后你可以简单缩小图片到普通的iphone适用的尺寸上.
你可能会奇怪为什么要劳神创建两张不同的图片 — 为什么不总是调用一张大的图片然后用编程将其缩小呢?好吧,加载纹理到内存中是app的内存克星,所以如果你在普清屏上加载高清图片将会浪费大量的内存.
但是别担心 — 你不需要总是在Photoshop中缩放图片.TexturePacker实际上已经有了缩放给定图片的特性,它正好被用在我们的Cocos2D之旅上.
iPad,iPhone以及屏幕纵横比
以上使得我们在高清屏中的处理更加容易,但是在iPad中怎么办?
好吧,这将给我们带来一个非常烦人的问题:如何使其在iphone和ipad上都能正常工作 — 比较这些设备的屏幕纵横比不一样!
iPhone的分辨率为480x320活着960x640 — 纵横比为1.5,而ipad分辨率为768x1024(原作者写作时高清ipad还未出世.猫猪注),纵横比为1.33.
这意味着如果你将一张在ipad(768x1024)填充整个背景的图片在iphone上重新使用的时候,可能不会完全适配.如果你按iphone的宽度来缩小图片(乘以0.9375),你将得到720x960,所以额外的部分将会被裁剪掉!
这很让人讨厌,因为不光是背景图片,屏幕纵横比问题也使得跨设备兼容难上加难.
这里有一些解决方案,这里列出一些(你可以在评论中也将你自己的解决方案贴出来):
- 在高清屏iPhone(640x960)屏幕中心划出一片”可玩区域(playable area).这将在边框附加有稍许额外的超出 — 你可以用背景将其掩盖,玩家可能甚至不会注意到.这将允许你容易的在各种不同的设备上重用素材和转换坐标.我们在本系列博文中就是用这种方法.
- 你可以在iphone上使用类似纵横比,如果你在ipad屏幕上将”main content”限制在684x1024中的话,这将给你的ipad屏幕每条边带来42像素的边框.如果你能调整内容适应684x1024矩形,你也可以为其他设备缩小图片.
- 你可以为iPhone,iPad和高清屏设备准备不同的图片,它们的坐标系也不同.这将具有最大的弹性,但是也会增大app文件的尺寸
对于这些难题 — Cocos2D目前并没有任何帮助方法在ipad上自动为你加载”-hd”后缀的图片(新版本的Cocos2D已经可以为ipad选择合适的图片了.猫猪注),以及转换坐标系等等工作.一切都取决于你!
Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点 出现无法打开包括文件:“cocos2d.h”: No such file or direct
Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点
出现无法打开包括文件:“cocos2d.h”: No such file or directory
第一步:把书中源代码文件夹拷贝到以下目录。
打开此文件夹后,显示如下:
用VS2012打开proj.win32里边的Chapter16_2_CardDefence08.win32.vcxproj,按下图打开:
第二步:在附加包含目录中,添加如下代码:
如果出现fatalerror C1083: 无法打开包括文件:“cocos2d.h”:No such file or directory
解决方法如下:选择项目属性--》C/C++--》附件包含目录设置为:
复制:$(ProjectDir)..\..\..\cocos2dx;$(ProjectDir)..\..\..\cocos2dx\include;$(ProjectDir)..\..\..\cocos2dx\kazmath\include;$(ProjectDir)..\..\..\cocos2dx\platform\win32;$(ProjectDir)..\..\..\cocos2dx\platform\third_party\win32\OGLES;..\Classes;%(AdditionalIncludeDirectories);
同时注意把E:\cocos2d-x-2.2.3\extensions
E:\cocos2d-x-2.2.3\cocosDenshion\android
E:\ cocos2d-x-2.2.3\cocos2dx\platform\third_party\win32\libraries
加到C/C++--》附件包含目录中去。
第三步:把E:\cocos2d-x-2.2.3\Debug.win32下的所有lib文件和dll文件拷贝至自己项目的Debug.win32下面。
最终运行成功画面如下:
Cocos2d-2.x_使用系统时间来获取随机数
#ifndef __HELLO_WORLD_H__ #define __HELLO_WORLD_H__ #include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC; USING_NS_CC_EXT; class HelloWorld : public cocos2d::cclayer { public: HelloWorld(); virtual ~HelloWorld(); static cocos2d::CCScene* scene(); virtual bool init(); CREATE_FUNC(HelloWorld); }; #endif
#include "HelloWorldScene.h" #include "SimpleAudioEngine.h" HelloWorld::HelloWorld() { } HelloWorld::~HelloWorld() { } CCScene* HelloWorld::scene() { CCScene *scene = CCScene::create(); HelloWorld *layer = HelloWorld::create(); scene->addChild(layer); return scene; } bool HelloWorld::init() { if (!cclayer::init()) { return false; } //获取系统时间 //time_t是long类型,精确到秒,通过time()函数可以获得当前时间和1970年1月1日零点时间的差 time_t tt; time(&tt); struct tm * Now; //获得本地时间 Now = localtime(&tt); cclog("%d/%d/%d %d:%d:%d",Now->tm_year + 1900,Now->tm_mon + 1,Now->tm_mday,Now->tm_hour,Now->tm_min,Now->tm_sec); //产生随机数 //CCRANDOM_0_1()获取一个0-1之间的float类型数,包括0和1 //通过CCRANDOM_0_1()获得的随机数其实并不是随机的,要想获取接近真实的随机数需要设置一个种子 //比较常用的方法是以当前时间为种子,在cocos2d-x中提供了获取时间的方法,而且获取的时间更精确 //cc_timeval是个结构体,里边有俩个变量,一个是以秒为单位的,一个是以微妙为单位的 cc_timeval tv; CCTime::gettimeofdayCocos2d(&tv,NULL); //都转化为毫秒 unsigned long reed = tv.tv_sec * 1000 + tv.tv_usec / 1000; //srand()中传入一个随机数种子 srand(reed); //如果要获得a~b之间的一个随机数,则应该是CCRANDOM_0_1*(b-a)+a,传入的参数就是a和b int randomValue = CCRANDOM_0_1()*(10-0)+0; cclog("random = %d",randomValue); return true; }
cocos2d-iphone – Cocos2d Box2d或Chipmunk
这是Cocos2d:http://www.cocos2d-iphone.org/的网站
下载:http://www.cocos2d-iphone.org/download
今天的关于cocos2d-x - 产生随机数(c++)和cocos随机生成怪物的分享已经结束,谢谢您的关注,如果想了解更多关于Cocos2D iOS之旅:如何写一个敲地鼠游戏(二):Cocos2D中的高清支持、Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点 出现无法打开包括文件:“cocos2d.h”: No such file or direct、Cocos2d-2.x_使用系统时间来获取随机数、cocos2d-iphone – Cocos2d Box2d或Chipmunk的相关知识,请在本站进行查询。
本文标签: