cocos2dx3.X项目重写(四)添加地板,障碍物和碰撞检测

cocos2dx之砖块地图研究——TiledMap,CCTMXTiledMap,CCTMXLayer,CCTMXObjectGroup 先对TiledMap,CCTMXTiledMap,CCTMXLayer,CCTMXObjectGroup做一下简单介绍。 TiledMap地图,是游戏开发中常用的地图,称之为砖块地图(瓷砖地图,瓦片地图),格式为tmx。官网:http://www.mapeditor.org/ CCTMXTiledMap,cocos2dx的地图类,通过加载tmx文件直接得到。 CCTMXLayer,c 阅读详情

我暂时不想使用地图,我想如果用精灵直接制造成方块也是可以的。代码如下,这个是添加地板

void Stage::addGround()
{
	auto g=Sprite::create();
	g->setTextureRect(Rect(0,0,visible.width,15));
	g->setColor(Color3B(100,100,100));
	g->setPosition(visible.width/2,world_y-8.5);
	this->addChild(g);
}
我并不知道Rect的前两个参数是干什么的,源代码写的是x和y,好像是坐标的意思,但是我设置了不同的值效果是一样的..

顺便提一句,血的教训,在继承自父类之后,在init()里要先执行一下父类的init。
写一个block类

bool myblock::init()
{
	Sprite::init();
	speed = 5;
	auto visible = Director::getInstance()->getVisibleSize();
	/*Size s =(Size(rand()%20+5,rand()%20+5));*/
	s =Size(rand()%25+10,rand()%35+5);
	this->setPhysicsBody(PhysicsBody::createBox(s));
 	this->setTextureRect(Rect(0,0,s.width,s.height));
 	this->setColor(Color3B(100,100,100));
 	this->setPositionX(visible.width-s.width/2);
 	this->schedule(schedule_selector(myblock::block_run));
	return true;
}


void myblock::block_run(float f)
{
	this->setPositionX(this->getPosition().x-speed);
	if (this->getPositionX()<0)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">	</span>     removeFromParent();
<span style="white-space:pre">	</span>}
}
加了定时器,让方块一直往左走,当block离开屏幕就移除。

然后在Stage中加定时器,隔一段时间出现一个方块,但是又不能在计时器函数参数后面加一个rand()做时间,因为这是个伪随机数,后来在网上找到了一个很聪明的办法。

让数a=0,让b取一个制定范围的随机数,在updat里让a++,当a>b就生成一个障碍,并且让a=0,b再取一个随机数。如此循环。

void Stage::restar()
{
	a=0;
	b=rand()%120+60;
}
void Stage::addblock(float f)
{
	    a++;
		if(a>=b)
		{
			auto b=myblock::create();
			this->addChild(b);
			b->setPositionY(world_y+b->s.height/2);
			b->getPhysicsBody()->setDynamic(false);
			restar();
		}
}


由于block得添加两种,一种地上的,一种浮空的,只能趴着过的。两者必须随机添加。我的方法如下。

myblock.h

static myblock* create(Size s);

myblock.cpp

myblock* myblock::create(Size s)
{
	
	myblock* bl = new myblock();
	//Sprite::init();
	bl->init();
	bl->speed = 10;
	auto visible = Director::getInstance()->getVisibleSize();
	/*Size s =(Size(rand()%20+5,rand()%20+5));*/
	/*i =Size(rand()%35+20,rand()%45+15);*/
	bl->setPhysicsBody(PhysicsBody::createBox(s));
	bl->setTextureRect(Rect(0,0,s.width,s.height));
	bl->setColor(Color3B(100,100,100));
	bl->setPositionX(visible.width-s.width/2+300);
	bl->schedule(schedule_selector(myblock::block_run));
	bl->getPhysicsBody()->setContactTestBitmask(1);
	


	return bl;
}

Stage.cpp

void Stage::addblock(float f)
{
	    a++;
		if(a>=b)
		{
			if (b>90)
			{
				Size s =Size(rand()%35+20,rand()%45+15);
				auto bl=myblock::create(s);
				this->addChild(bl);
				bl->setPositionY(world_y+s.height/2);
				bl->getPhysicsBody()->setDynamic(false);
				restar();
			}
			else
			{
				Size s =Size(rand()%75+35,rand()%25+10);
				auto bl=myblock::create(s);
				this->addChild(bl);
				bl->setPositionY(world_y+s.height/2+100);
				bl->getPhysicsBody()->setDynamic(false);
				restar();
			}
		}
}

测试碰撞,先添加Listener,这个物理引擎有自己的碰撞监听。

auto listen = EventListenerPhysicsContact::create();
	listen->onContactBegin=[&](PhysicsContact& contact)
							{
								log("<<<<<<<<<<<<<<");
								return true;
							};
	Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listen,this);
然后给主角和block类各填一句话,打开碰撞检测开关,都设置成相同的数,两者就可以碰撞检测

->getPhysicsBody()->setContactTestBitmask(1);
然后就可以添加死掉的动作在拉姆达表达式中。





Cocos2D-x游戏开发之十九:瓦块地图之碰撞检测 昨天我们有了精灵和背景,并且精灵可以跑动了,但是我们不能让精灵无穷无尽地跑下去吧,于是今天我们要在地图上添加一些障碍物了; 首先打开精灵的TMX地图,然后我们自定义一个32X32像素的图片添加到图层中,然后设置此图层的属性为:“collidable” 值为“true”,下一步在地图中新建一个图层起名为“meta”现在发挥你的创造性把这些小东西添加此图层中保存即可。 接下来就该在code中做一些 阅读详情

相关推荐

cocos3d加载3Dmax模型Demo

用cocos3d加载3Dmax模型的Demo. 详细可以看博客:http://fengmm521.blog.163.com/blog/static/25091358201210173463909/

Cocos Creator游戏开发-合成大西瓜 CocosCreat

本课程以实战为主,游戏中需要什么功能,我们就讲解相应的知识点,这样学到的知识会马上用起来也就不会枯燥。本课程讲解相当完整,从最基础的软件安装开始,到打出游戏安装包,一套完整的课程讲解。购买了本课程,可以在课件下载一栏,下载本课程中所用到的软件开发的安装包,和每一课时相关的完整项目

Linux下自动化解析q7签名文件的有效期与时间戳

本文详细介绍了在Linux环境下自动化解析q7签名文件有效期与时间戳的方法。通过编写高效脚本,开发者可以批量提取签名时间信息,验证签名有效性,并集成到CI/CD流程中。文章提供了完整的脚本实现,包括错误处理、批量处理功能,并解决了常见环境问题,特别适用于国产操作系统如UOS的开发场景。

weixin_30872499的博客 521

【Cocos Creator实战教程(8)】——打砖块(物理引擎)

失踪人口回归 本篇教程要基于Cocos Creator1.5的物理引擎,编写一个简单的打砖块游戏,尽可能多讲一点,但现在已经快11点了,我12点要睡觉啊,好像又讲不了多少,这个世界啊,本来就是一个矛盾体。新建一个工程,取名叫做brick-breaker,brick是什么意思呢,就是砖块的意思,每次给工程起名字,我都能学会一个新单词。目录结构如下:game场景,设置Canvas 先搭一个游戏背景

Next的博客 4万+

华为[ENSP]OSPF的配置实例(单区域+多区域)

华为[ENSP]OSPF的配置实例(单区域+多区域)

weixin_62594100的博客 2万+

从T型结到Wilkinson:5分钟搞懂功分器选型指南(附最新射频测试数据对比)

本文通过对比T型结、电阻型和Wilkinson三种功分器的核心原理与实测数据,提供了清晰的射频功分器选型指南。文章结合最新的2.4GHz ISM频段测试数据,分析了插入损耗、回波损耗和端口隔离度等关键指标,并针对窄带物联网、射频测试及合成系统等不同应用场景,给出了具体的选型建议和实战提醒,帮助工程师根据系统需求做出最优决策。

bush的博客 305

cocos2dx实现自定义2D地形

先来看看效果: 对于2D地形的生成,可以采用2种方法, 1.使用建模软件将2D的地形模型构建好直接使用Sprite3D导入   优点:不需要太多程序控制,只是简单的导入 缺点:需要建模,而且还要转换成2D坐标,很难使用chipmunk加入物理特性   2.根据自定义数据使用顶点数据和shader。 下面来讲解如何实现,之后分析优缺点。 推荐一篇博客 如何制作

bad 3950

RT-Thread stm32h7使用串口DMA

stm32h7在rtthread中无法使用串口DMA,通过更改驱动代码使其支持串口DMA

qq_35141454的博客 2287

Cocos2dx <基础> 瓷砖地图(2)

(在TMX地图中添加并且移动精灵)---&gt; 将地图层和精灵层分开将地图层和精灵层分开:  class TieldMap:public cocos2d::Layer中, this-&gt;addChild(地图层); this-&gt;addChild(精灵层);下面文章的目的: a.先将图片组成帧动画信息(Animation),然后载入到动画缓存中,根据帧动画名获得帧动画信息。根据帧动画信息...

小白的博客 467

使用epiDisplay包中的logistic

其中的logistic.display函数可以用于获取逻辑回归模型的汇总统计信息,包括自变量的优势比和置信区间,以及回归系数的Wald检验的p值。最后,我们使用print函数打印出汇总统计信息。使用epiDisplay包中的logistic.display函数获取逻辑回归模型的汇总统计信息(包括自变量的初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)- R语言。通过使用logistic.display函数,我们可以方便地获取逻辑回归模型的重要统计信息,并对自变量的影响进行解释和推断。

CyberJolt的博客 609

大模型多智能体协作面试题及参考答案

在多智能体系统里,代理定义自身目标或效用函数的过程与系统架构、应用场景紧密相关。从本质上讲,目标是代理行为的导向,而效用函数则是对目标达成程度的量化评估。代理通常依据自身角色、系统全局需求以及与其他代理的交互关系来确立目标。比如在合作型 MAS 中,代理目标可能需要与全局目标对齐,像多个物流机器人协作完成货物配送时,每个机器人的目标会围绕 “高效完成分配任务”“避免路径冲突” 等展开,其效用函数可能涉及任务完成时间、能耗等指标的加权求和。目标定义的方式存在多种类型。

大模型大数据攻城狮的专栏 1023

cocos2d-x 《Flappy Bird 》四、绘制碰撞框 和完整源代码

《flappy bird》是由来自越南的独立游戏开发者Dong Nguyen所开发的作品,游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍,而这只鸟其实是根本不会飞的……所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。 图片资源提取后使用P

West Third Ring 2126

silero-vad 训练自己的数据

silero-vad 训练自己的数据

jacke121的专栏 816

【Cocos2dx】飘字特效与碰撞检测

飘字特效主要常见与游戏里面的掉血表示伤害输出等。碰撞检测常见于一些横版过关或者跑酷的手游,判断是否有碰到食物,或者什么障碍物等,都是比较常见的功能,下面就用一个小例子,来说明这两个特效如何完成。 如下图所示,有两个按钮,点击/触摸屏幕,则下方的按钮则会跳起来。碰到处于屏幕中央的按钮,则会弹出飘字特效,显示碰撞。 同时,左上角的时刻,这两个按钮是否碰撞,也就是是否交汇,相互接触,相交,inter

编程记录,亲测有效 3848

【ComfyUI 基础教程】ComfyUI 局部重绘工作流教程

本篇指南将带你了解 ComfyUI 中的局部重绘工作流,并带你完成一个局部重绘的示例,以及遮罩编辑器的使用等。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 303

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【cocos2dx-3.0beta-制作flappybird】终于要来正戏了—游戏层的设计和小鸟的加入

一、引言 在上一节当中,我们分析了游戏层跟控制层的关系,而在这一节当中,我们将会详细介绍游戏层(GameLayer)的具体实现。 二、游戏层的基本结构 单游戏层来说,它包括两个元素: 1、小鸟 2、障碍物(水管) 游戏层的操作: 1、游戏状态的表示 2、添加小鸟和水管 3、分数的实时统计 4、碰撞的检测 三、游戏状态的表示 采用枚举类型表示游戏的三种状态:准备状

... 6760

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

cocos2dx 3.x Tiled的程序控制

From: http://blog.csdn.net/lengxue789/article/details/38399995 1. Tiled 对象层 TMXObjectGroup 对象存放了对象层的所有对象,通过getObjectGroup函数获取指定名称的对象层,还可以通过getObject获得具体的对象。 [html] view plaincopyprint?

Game Developer 440

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

cocos2d-x系列笔记(7)---碰撞检测

游戏中地图上总有些过不去的沟沟坎坎\山河湖泊.这节我们就来讲讲在coco2dx下如何实现碰撞检测 首先我们基于的tmx地图,所以就要先在地图上做些手脚. 除了建立的基本地形层,我们在编辑器中又建立了一个碰撞层 并在湖面上放置了一些表示不能通过的碰撞障碍 在表示障碍的图块上右键->图块属性 为该图块中增加一个Collidable属性,值设置为true.这项属性值等下我会在程序中

jinciyulang的专栏 2489

cocos2dx 打武器玩法实现

实现一个从空中飞来各种武器:飞镖,菜刀,斧头、刀子,还有各种蔬菜水果作为障碍物,所有东西飞向屏幕中央,主角站在正中心去躲避武器,武器打到身上会受到伤害,蔬菜水果不会,代码实现如下: .h文件 #ifndef __SCATTER_H__ #define __SCATTER_H__ #include "cocos2d.h" #include "Box2D/Box2D.h" #include "Ch

joshua 1458

如何使用cocos2dx3.0制作基于tilemap的游戏:第二部分

引言 程序截图:   这篇教程是《如何使用cocos2dx3.0制作基于tilemap的游戏》的第二部分。在上一个教程中,我们创建了一个简单的基于tiled地图的游戏,里面有一个忍者在沙漠里寻找可口的西瓜!   在第一部分教程中,我们介绍了如何基于tiled创建地图,怎样把地图增加到游戏中去,以及如何滚动地图来跟随主角移动、还有如何使用对象层。   在这部分教程中,

水墨鱼的专栏 4327

【cocos2dx】TMXTiledMap增加碰撞体

TMXTiledMap 增加碰撞体,可以添加任何所见到的物体上,本次文章是增加到object多边形上,TMXTiledMap必须存在object,代码如下TMXTiledMap * map = TMXTiledMap::create("gismap.tmx"); TMXLayer * layer = map->getLayer("layer"); TMXObjectGroup * group =

shy 2246

Cocos2d-x 瓦块地图小游戏 (五) 城墙 与 吃瓜

1、 2、 3、 4、 5、 6、

wwkaven的专栏 1264
上一篇: cocos2dx3.X项目重写(番外篇)3.X打包apk的注意事项
下一篇: cocos2dx3.X项目重写(五)添加分数,开始和结束场景。
Fried_potatoes
博客等级 码龄12年 5粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值