GVKun编程网logo

cocos2d-x c++使用误区记录(cocos能用c++吗)

10

在这篇文章中,我们将带领您了解cocos2d-xc++使用误区记录的全貌,包括cocos能用c++吗的相关情况。同时,我们还将为您介绍有关Bullet(Cocos2dx)之使用cocos2dx测试Ph

在这篇文章中,我们将带领您了解cocos2d-x c++使用误区记录的全貌,包括cocos能用c++吗的相关情况。同时,我们还将为您介绍有关Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D、Cocos2D iOS之旅:如何写一个敲地鼠游戏(二):Cocos2D中的高清支持、Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点 出现无法打开包括文件:“cocos2d.h”: No such file or direct、cocos2d-iphone – Cocos2d Box2d或Chipmunk的知识,以帮助您更好地理解这个主题。

本文目录一览:

cocos2d-x c++使用误区记录(cocos能用c++吗)

cocos2d-x c++使用误区记录(cocos能用c++吗)

1.类当中的指针成员变量在初始化接收值时,不能直接把外部的一个值的地址简单赋值给该成员变量,应该使用new操作符来初始化。外部的值随时可能被释放掉。
eg:

class A
{
public:
            A();
            std::string* str;
};

A::A()
{
    str = String::create("abc")->getCString();//错误(String是cocos2dx里面的字符串格式刷函数)
    str = new std::string("abc");//正确
}

Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D

Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D

1.使用 Cocos 引擎建立工程,打开 cocosstudio 修改分辨率为 960*640 ,删掉背景图片 发布到vs 工程 1.打开 AppDelegate 设置分辨率,并运行 director-getOpenGLView()-setDesignResolutionSize(960,640, ResolutionPolicy :: EXACT_FIT ); 2.配置Bullet(win

1.使用cocos引擎建立工程,打开cocos studio 修改分辨率为960*640,删掉背景图片

Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D

发布到vs工程Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D

1.打开AppDelegate设置分辨率,并运行

 director->getOpenGLView()->setDesignResolutionSize(960, 640, ResolutionPolicy::EXACT_FIT);

2.配置Bullet(win32)到cocos2dx

首先要将bullet3-master的头文件复制到cocos\frameworks\cocos2d-x\external\Bullet;具体方法请看

如下图Bullet3之交叉编译Android 复制头文件

Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D

4.将编译好的Bullet库(win32release库复制到

Cocos\frameworks\cocos2d-x\prebuilt\win32下分别更名为

BulletCollision_vs2012.lib

BulletDynamics_vs2012.lib

BulletSoftBody_vs2012.lib

LinearMath_vs2012.lib

如何得到Bullet库,这个就要去看Bullet3Hello Worldvs2012补充如何生成Bullet

5.打开刚才生成的项目的属性,选择链接器->输入->附加依赖项,输入生成的Bullet库,如图

Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D

将PhysicsWorld3D类复制到classes/physics3d并添加到工程中,编译运行,成功表明配置成功,

有可能会出现error LNK2038: 检测到“RuntimeLibrary”的不匹配项MTd_StaticDebug不匹配值“MDd_DynamicDebug”

Bullet生成时的c/c++->代码生成->运行库,改为MD

 

5.测试PhysicsWorld3D

HelloWorldScene.h添加

#include "physics3d/PhysicsWorld3D.h"
public:
	void onExit();
	void update(float delta);

private:
	bool initPhysics3D();		// 初始化物理世界
	bool initCamera();		// 初始化摄像机

private:
	PhysicsWorld3D* _world;	        // 3d 物理世界
	btRigidBody* _box;		// 盒子
	cocos2d::Sprite3D* _spBox;	// 盒子模型
	cocos2d::Camera* _camera;	// 摄像机
登录后复制

在HelloWorld::init()

先初始化摄像机,再初始化物理世界,

关于初始化物理世界,首先创建,然后添加一个地面,再添加一个box作为测试用

bool HelloWorld::initPhysics3D()
{
	_world = PhysicsWorld3D::create();	// 创建3d物理世界
	if (_world == nullptr)
	{
		return false;
	}
	
	// 载入plane模型
	auto spPlane = Sprite3D::create("model/ground.c3b"); 
	this->addChild(spPlane);
	spPlane->setPosition3D(Vec3::ZERO);
	
	// add a plane 方向向上,位置(0,0,0), 0.5的摩擦,0.5的弹性
	_world->addPlane(btVector3(0, 1, 0), btVector3(0, 0, 0), PhysicsMaterial3D(0, 0.5, 0.5, 0));
	
	// 载入盒子模型
	_spBox = Sprite3D::create("model/box.c3b");
	this->addChild(_spBox);
	_spBox->setPosition3D(Vec3(0, 20, 0));

	// add a box
	_box = _world->addBox(btVector3(1, 1, 1), btVector3(0, 20, 0));
	_box->setUserPointer(_spBox);

	// 设置2摄像机可见
	this->setCameraMask(2);
	return true;
}
登录后复制

每一帧去更新物理世界,同时更新box的位置,当然可以使用MotionState去优化,这个不着急

void HelloWorld::update(float delta)
{
	static float m[16];
	_world->update(delta);
	auto trans = _box->getWorldTransform();		// 获取box的变换矩阵
	trans.getOpenGLMatrix(m);
	_spBox->setNodeToParentTransform(Mat4(m));	// 设置box模型的变换矩阵,但是getPosition3D不会得到正确位置,这个以后讨论
}
登录后复制

当HelloWorld退出时要销毁物理世界

void HelloWorld::onExit()
{
	Layer::onExit();

	_world->destroy();		// 销毁物理世界
	_world = nullptr;
}
登录后复制

当运行程序,会看到一个box从天而降,重重的摔在地上

Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3DBullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D


源代码及其资源下载

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-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能用c++吗的介绍到此结束,谢谢您的阅读,有关Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D、Cocos2D iOS之旅:如何写一个敲地鼠游戏(二):Cocos2D中的高清支持、Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点 出现无法打开包括文件:“cocos2d.h”: No such file or direct、cocos2d-iphone – Cocos2d Box2d或Chipmunk等更多相关知识的信息可以在本站进行查询。

本文标签: