Cocos2d-x中为瓦片地图添加物理引擎组件

因为网上难以找到整个流程,今天花费了一个下午终于得到一些突破,不得不吐槽学校为什么要使用年代这么久远的引擎让我们制作项目。

首先我们要用tiledmap创建一个地图
在这里插入图片描述
在这个地图里使用了不同的图层,瓦片地图里的不同瓦片需要的属性往往不一样,这里的背景就不需要进行物理引擎碰撞检测,我们只需要把需要碰撞的瓦片都放在一个图层frontground里。

下面是所有的代码,已经写好了注释,自己看吧。

.h文件里

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
USING_NS_CC;

class HelloWorld : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();
	cocos2d::TMXTiledMap* tileMap;//瓦片地图
	cocos2d::Sprite *player;
    virtual bool init();
	Sprite* tile[1000];//这个精灵类数组用来装需要添加碰撞组件的瓦片
	int lastile = 0;//这是tile数组的尾下标
    CREATE_FUNC(HelloWorld);
};

#endif // __HELLOWORLD_SCENE_H__

cpp文件里

#include "HelloWorldScene.h"

USING_NS_CC;

Scene* HelloWorld::createScene()
{
	auto scene = Scene::createWithPhysics();//创建带物理引擎的场景
	scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);//用来看运行后精灵的物理引擎组件
	auto layer = HelloWorld::create();

	scene->addChild(layer);

	return scene;
}
bool HelloWorld::init()
{
    auto visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
	
	auto body = PhysicsBody::createEdgeBox(Size(1920,1920), PHYSICSBODY_MATERIAL_DEFAULT, 5.0);//创建物理世界边框
	auto edgeNode = Node::create();
	edgeNode->setPosition(Vec2(960, 960));//物理世界边框的中心位置
	edgeNode->setPhysicsBody(body);
	this->addChild(edgeNode);
	
	tileMap = TMXTiledMap::create("tilemap/test2.tmx");//实例化瓦片地图
	tileMap->setPosition(0, 0);
	addChild(tileMap,1);

CCTMXLayer* frontground = tileMap->layerNamed("frontground");//获取需要添加PhysicsBody的瓦片所在的图层
	for (int i = 0; i <= 39; i++)
	{
		for (int j = 0; j <= 39; j++)//瓦片地图大小40x40,从0开始,这个循环遍历一遍所有瓦片
		{
			tile[lastile] = frontground->tileAt(ccp(i, j));//获取frontground层里的瓦片,瓦片是精灵,可以放在这个数组中
			if (tile[lastile])//并不是所有位置都有瓦片,如果没有瓦片就是空
			{
				auto boxPhysicsBody = PhysicsBody::createBox(tile[lastile]->getContentSize());//设置PhysicsBody组件
				tile[lastile]->setPhysicsBody(boxPhysicsBody);//给瓦片添加上PhysicsBody组件
				lastile++;
			}
		}
	}
	log("%d", lastile);//输出添加了PhysicsBody组件的瓦片数
    return true;
}

运行结果是这样,瓦片现在有重力会下落,这个当然要调,但是为瓦片地图添加物理引擎基本已经实现了
在这里插入图片描述
log显示一共有45个瓦片添加了组件,可以看到并没有出错
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值