GVKun编程网logo

cocos2d-x - 产生随机数(c++)(cocos随机生成怪物)

10

此处将为大家介绍关于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-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中的高清支持

Cocos2D iOS之旅:如何写一个敲地鼠游戏(二):Cocos2D中的高清支持

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)

免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!

高清显示和Cocos2D

好吧,有一个好消息 — 在最新版本的Cocos2D中包括了高清屏的完整支持,你可以用下面1-2-3步就可简单搞定!

  1. 在调用CCDirector的enableRetinadisplay方法在app开始时启用高清支持.如果你使用cocos2D项目模板,你只需要在app delegate中在那一行去掉注释即可.
  2. 增加高清精灵到你的app中,但是不是使用”@2x”后缀,而是为cocos2D使用”-hd”后缀.当你加载精灵的时候,在普通屏将使用普通图片,在高清屏Cocos2D将在高清屏自动为你加载高清图片.
  3. 现在你可以在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 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_使用系统时间来获取随机数

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-iphone – Cocos2d Box2d或Chipmunk

好的,我试图制作一个我在这里制作的一个游戏的iphone版本 http://scratch.mit.edu/projects/techy/781198是Box2d或花栗鼠更好,每个教程在哪里
如果您下载Cocos2d SDK,在附带的项目中是Box2d和Chipmunk的示例。只需打开名为“cocos2d-iphone”的Xcode项目,并查看Box2dtest和Chipmunkdemo。 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的相关知识,请在本站进行查询。

本文标签: