cocos2dx3.X项目重写(六)添加不同高度的地图和跳跃优化

cocos2d-x+Tiledmap中实现自由跳跃和移动 最近在学习cocos2d-x,遇到一个问题:在tiledMap中,怎么实现类似超级玛丽跳跃和移动那样的算法? 阅读详情

以前的时候,我的地图是一个水平的地平面,为了增加可玩性,在这一次我添加了随机出现的方块形地图,大小和高度都是随机的。
首先准备四张图图片,高度相同但是宽度不一样,作为随机出现的地图块。

那么问题来了,肯定是要在schedule的自定义函数中,添加地图块的,但是为了随机,首先得让前一块地图块的最右边划出屏幕的最右侧才可以出现第二块,在这个间隙,还得添加一个随机的时间以及随机的下一个地图块。我来一一说明我的解决办法。

首先肯定是建立地图类bigblock.cpp和bigblock.h文件,我的想法是让bigblock一生成就有两个效果,一个是向左移动,一个是随机添加一个资源(四个图片前面有准备好),第一个问题以前实现过,就是加schedule,不多说,第二个功能,为了让随机添加一个图片,我先自定义一个create函数

static bigblock* create();

那么这样就明了了,我把四个图片的名字作为字符串添加到数组,然后随机取一个传进去就好了。代码如下

bigblock* bigblock::create()
{

	bigblock* bb = new bigblock();
	bb->init();
	bb->speed = 5;
	std::string v[4]={"bigblock1.png","bigblock2.png","bigblock3.png","bigblock4.png"};
	int r=0+rand()%3;
	bb->initWithFile(v[r]);

	bb->setPhysicsBody(PhysicsBody::createBox(bb->getContentSize()));
	bb->getPhysicsBody()->setDynamic(false);

	return bb;
}
这样随机出现不同block的功能就实现了,然后再看随机时间添加

在stage里,我已经有了addblock函数每帧都执行,这时候出现了一个问题,就是如果直接随机时间添加是很简单的,设定一个随机函数,create地图块就行了,但是这样会重叠,那就不好了,我得知道前一个块的尾部刚刚走出屏幕右边,这个时候再给一段随机时间,添加个块就不会重叠了,而且会出现坑,player掉下去就挂掉。但是问题又来了,

我们添加的函数肯定是auto bb=bigblock::create();,每个精灵都叫bb,根本没法分辨(这里多说一句,如果在正常情况下我们添加两个精灵,是重名的话,一定会报错,但是在schedule函数里面,每帧添加一个同名精灵就不会报错,我查了查资料,大概的意思是schedule会把这些精灵放到类似队列或者数组里面,这样的话,可能就不会有重名问题,但是我没有找到怎么访问他们的方法),我想如果添加数组的话,简直太麻烦,后来想到了个办法,用tag,把每个精灵标上tag,用getChildByTag获得当前tag的精灵,如果他的尾部出界了,就给一个随机时间,添加下一个,然后下一个的tag++;代码如下

		int hh= 0+rand()%55;
		if (getChildByTag(bigtag)->getContentSize().width/2+getChildByTag(bigtag)->getPositionX()<visible.width)
		{
		    
			a++;
			if(a>=b)
			{
				auto bb=bigblock::create();
				this->addChild(bb);
				bb->setPosition(Vec2(visible.width+bb->getContentSize().width/2,hh));
				bigtag=bigtag+1;
				bb->setTag(bigtag);
				restar();
				
			 }
			
		}
正如你所见,在设置坐标的时候,y轴的坐标用了随机函数,我们将得到高地交错的地面。

a和b的作用以前也有说过是获得随机时间。

至此地面的问题暂时解决了,接下来是跳跃的问题。

以前的时候,我们判断跳完了没有,是看player脚底的坐标是不是在地面了,现在不行了,地面的坐标不是定数了。我想了好久这个问题,如果判断现在脚下的物体高度简直太麻烦,后来想到了可以用速度来判断,如果速度为零便是在地面了,就可以再跳,但是问题来了,在最高点的时候速度也是零,这个问题一度让我很苦恼,怎么判断是在最高点还是在地面,我想说方法一定是有的,而且一定是一个简单的小算法,但是我发现,由于在空中的时候,速度为零的时间太短暂,来不及跳跃,所以暂且马虎过去,代码如下

在schedule里

 
       if(player->getVy()==0)
	   {
		   ve=1;

	   }
	   else
	   {
		   ve=0;
	   }
在跳跃的时候

if (ve==1)
        {

	  player->getPhysicsBody()->setVelocity(Vec2(0,1200));


	 }
最后还有一个问题,有一个有意思的功能是按住跳跃按钮会跳更高,一松手就会下落,这个功能我是这样实现的,在跳跃按钮抬起的时候设置速度为零

void Stage::button_jump_touchup(Ref* pSender,Control::EventType event)
{
	auto v=player->getPhysicsBody()->getVelocity();
	if (v.y>0)
	{
    	player->getPhysicsBody()->setVelocity(Vect(0,0));
    }
}

以上是我的解决方案,如有更好的方案或疑问请留言哦~


【cocos shader 006】 连续 滚动 特效无限地图背景 先上效果: local Rolling = { frag = [[ #ifdef GL_ES precision highp float; #endif varying vec4 v_fragmentColor; varying vec2 v_texCoord; uniform float speedX = 0.f; uniform float speedY = 0.f; void main() { vec2 pos = v_t 阅读详情

相关推荐

Cocos Creator v2.0安卓游戏开发实战:从跳箱子到APK上线

Cocos Creator 是一款面向2D游戏的轻量级跨平台引擎,其v2.0版本虽已迭代,但在安卓中低端设备上仍具不可替代的性能优势。该版本基于WebGL1+Canvas双渲染后端,对Android 7–9系统及联发科/骁龙4系SoC适配更优,启动更快、内存更稳。理解其底层资源加载队列、Canvas动态DPR校准、AudioEngine三重降级策略与Box2D轻量化改造,是保障闯关类游戏帧率稳定、音效不丢、触控不延的关键。本文聚焦真实安卓ROM生态(如MIUI、EMUI、ColorOS)下的逐厂适配实践,覆

weixin_33924220的博客 419

Cocos Creator 3.x 物理引擎使用笔记

Cocos Creator 3.x 引擎物理材质参数 属性 描述 friction 摩擦系数 rolling friction 摩擦系数 spinning friction 旋转摩擦力 restitution 回弹系数 实现人物在斜坡能原地站立效果 在使用Dynamic(动力学)物理数值控制制作人物在地形上移动时,胶囊碰撞器默认物理材质的摩擦系数较小,人物在移动到有斜坡地形时,会随重力滑落很远。 为模拟现实中人物在斜坡地形上是可以原地停留的效果,需要添加一个自定义物理材质,

weixin_39324642的博客 1556

cocos2dx-3.10 45度A*寻路

cocos2dx-3.10 45度A*寻路, http://blog.csdn.net/iuoon/article/details/51261187

创建地形——笔记

(8) 树:选中Terrain。选中Tree,点击Add Tree,在弹出界面选择准备好的预制体,点击add。依次点击Nomal Map和Mask Map右侧的Slect,增加法线贴图(紫)和遮罩(蓝)贴图。(1) 选中地形、设置整体地形的高度。(5) 编辑沙土层——选中Inspector中的新建沙土层,出现编辑面板。(7) 调节光滑度和笔刷后,开始在Scene中绘制。(3) 选中Terrain,绘制贴图。(6) 同样的方法创建草地。(9) 更改密度、高度等。(4) 新建一个沙土层。

Unity学习 601

Innovus每日精要 | 用setScanReorderMode优化扫描链,效率翻倍!

在数字后端物理设计的世界里,扫描链优化就像修路一样,既要保证数据流的顺畅,又要尽量减少绕路和资源浪费。它的主要任务是优化扫描链的连接方式,确保数据能快速、安全地流动。无论是多电压域设计、分区设计,还是复杂的逻辑门,它都能帮你搞定。后,你会发现它不仅能帮你节省时间,还能让你的设计更优雅、更高效。下次遇到扫描链问题时,不妨试试这些技巧,说不定你的设计效率会翻倍!,它能帮你搞定扫描链优化的那些事儿,让你的设计更高效、更优雅。接下来,我们看看这个命令的几个关键选项,以及它们的实际用途。扫描链优化看似枯燥,但掌握。

weixin_50820814的博客 1444

逆向选择启示录:一个失败高频策略如何意外跑赢市场

本文探讨了高频交易中的逆向选择现象,揭示了一个失败的高频策略如何通过简化意外跑赢市场。通过加密货币市场的实证分析和蒙特卡洛模拟,研究发现低预测性的简单策略反而更具鲁棒性,有效规避了逆向选择风险。文章还提供了小币种做市策略的优化框架和实践建议,为量化交易者提供了宝贵洞见。

weixin_29191669的博客 401

Cocos2d-x从入门到精通第六课《自定义绘制》

一.自定义绘制 一个图形引擎,总是由构建点,线,面的绘制功能写起来的。点,线,面。构成了最初的图形基础。所以说,掌握点,线,面是掌握引擎的基础。 Cocos2d-x 2.0的时候开始有的使用DrawPrimitives命名空间下的相关函数进行绘制。Cocos2d-x3.0版本开始有的DrawNode类提供的相关方法来绘制。今天的课程主要讲解使用最新的方法进行绘制。   二.图形绘制 获得

wocacaaa的专栏 1714

【影像组学入门百问】1#---#3

理论上讲三大主流平台Windows, Linux和MacOS均可进行影像组学研究。根据笔者实际经验,如果内存不足可能导致软件罢工,其余显示、GPU等均非必要。显示:最小分辨率为1024×768(推荐为1280×1024或更好)。Slicer中的许多计算都是多线程的,并且将受益于多核,多CPU配置。计算机需要足够的内存和图形功能将原始数据和处理结果保存在其内存中。如涉及深度学习等方法的研究需根据实际需求配置电脑,无法一概而论。接口设备:推荐使用带滚轮的三键鼠标。内存:超过4GB(推荐8G以上)。

weixin_38594676的博客 1485

cocos2d-x 使用地图编辑器

void WorldLayerSence::createMapUseTMXTailedMap() {     CCTMXTiledMap* map =         CCTMXTiledMap::create("Maps/orthogonal-test4.tmx");     if(map!=NULL)     {         this->addChild(map);    

快乐悍马2013的专栏 834

永磁同步电机自抗扰控制ADRC(位置环/速度环控制器)Matlab/Simulink仿真(S-Function)

ESO是ADRC的核心,其作用是跟踪被控对象的输出,同时给出受控对象的各阶状态变量以及系统总扰动的实时估计,将其补偿到控制器中,实现动态补偿线性化。NLSEF采用非线性函数把TD产生的跟踪及微分信号与ESO给出的状态变量估计值之间的误差进行非线性组合得到初级控制量,然后同总扰动的补偿量一起生成最终的控制信号。自抗扰控制(ADRC)技术的核心思想是将简单的积分串联型视为标准模型,把系统模型中不同于标准型的部分和外部干扰之和视为总扰动,并将其扩张为一个新的状态。看作系统内外部扰动之和。令一个高阶状态变量为。

m0_66341377的博客 7615

使用MATLAB和Simulink来设计并仿真一个智能家居火灾报警系统

智能家居火灾报警系统旨在通过烟雾传感器、温度传感器等设备监测家庭环境,一旦检测到异常情况(如烟雾或温度骤升),立即触发警报并采取相应措施。在这个教程中,我们将使用MATLAB和Simulink来设计并仿真一个智能家居火灾报警系统,包括数据采集、处理以及响应机制。

amy_mhd的博客 162

Cocos2d-x初入学堂(12)-->CCTMXTiledMap和CCTileMapAtlas拼地图

欢迎转载!转载时请注明出处:http://blog.csdn.net/aa4790139/article/details/8132740 上篇说了场景的切换,这一讲自然是游戏界面的制作了,游戏地图制作: 1、CCTileMapAtlas: //创建一个CCTileMapAtlas: CCTileMapAtlas* map = CCTileMapAtlas::create(地图素材.pn...

445822357 303

22、自动化地图制作与Pandas数据处理

本文介绍了在ArcGIS Pro中使用arcpy.mp模块进行自动化地图制作的关键技术,涵盖地图元素的访问、移动与文本修改,以及将布局批量导出为JPEG、PNG和PDF格式的方法。同时,文章深入探讨了Pandas在数据处理和地理空间分析中的应用,特别是Spatially Enabled DataFrames(SEDFs)的使用。通过综合案例展示了地图更新与数据清洗、分析的结合,提升了地图制作与数据处理的效率,为GIS自动化工作流提供了实用指南。

w8x9y0z1的博客 79

cocos2dx[3.4](25)——瓦片地图TiledMap

【唠叨】还记得我们小时候玩的小霸王里面的游戏吗?大部分都是基于Tile地图的游戏,如坦克大战、冒险岛、魂斗罗、吞食天地等。而在手游中,基于瓦片地图的游戏也很常见。如:《保卫萝卜》。瓦片地图有专门的地图编辑器:Tiled Map Editor 。先给大家看个酷炫的图吧。此图来自:http://blog.csdn.net/aa4790139/article...

weixin_33936401的博客 3035

Altair HyperWorks软件二次开发:二次开发成果展示与报告撰写

HyperMesh Python API允许用户通过Python脚本控制HyperMesh的大部分功能,包括模型创建、修改和分析。它提供了丰富的函数库,可以处理节点、元素、材料属性、载荷和边界条件等。二次开发可以用于创建自定义工具,这些工具可以集成到HyperWorks中,提供特定的功能或简化复杂的操作。

kkchenjj的博客 1642

开篇词:学习系统分析师的好处?核心考点有哪些?

系统分析师备考指南 系统分析师是IT行业的高级专业人才,具备系统分析与设计能力,能指导开发团队工作。学习系统分析师不仅能获得职业晋升的"黄金跳板",还能全面提升技术架构思维和业务理解能力。 核心价值: 职业发展:晋升管理岗位的硬性要求,突破职业天花板 能力提升:构建T型知识结构,培养架构思维和软技能 市场竞争力:成为"业务+技术"桥梁,获得国家级专业认证 考试内容: 计算机基础知识(硬件、操作系统、网络等) 系统分析专业知识(软件工程、架构设计等) 进阶知识(企业信息

数据知道的博客 5944

关于Cocos2d-x中使用自定义地图等对象的缩放与拖动的实现

近日在做数据结构课程设计,题目是公交线路上优化路径的查询。图形方面需要实现可视化的地图,同时最好能够实现缩放与拖动。经过一番折腾后大致实现了此功能,方法并不困难,在此提供一下方法,给没有好想法或在高端技术实现上遇到困难的童鞋们一点思维的启迪。 首先,我们需要一个大的Layer,这个Layer用来绘制所有的地图元素信息,包括公交线路、站点图标、导航、背景图等等; 接着,我们要在这

学渣的博客 1343

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

cocos2d-x 瓦片地图的黑线及地图抖动解决方案

BUG 1:地图的每个图块之间有一些细密的间隔,特别是场景移动时更加明显,将游戏截图放大,可以很明显看到这个细线            解决方案:通过设置ccConfo.h中的CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL宏来解决。              将  #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 0

we000636的专栏 7729

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

cocos2dx-js RenderTexture 将多张图片合并成一张图片

var sprite = new cc.Sprite("about_btn.png"); var sprite2 = new cc.Sprite("add5.png"); //创建画布 var rend = new cc.RenderTexture( starManager.winSize.width, starManager.winSize.he

cuijiahao的专栏 6186

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SDL游戏开发之七-虚拟摇杆

当下的智能机除了音量键、Home键外,几乎没有多余的按键,因而有一部分游戏提供了虚拟摇杆。 SDL2.x并没有提供虚拟摇杆相关的代码,不过实现起来并不算困难;虚拟摇杆包括绘图和事件处理:前者提供视觉效果,后者则捕获事件并作出响应。 示例结果如下: 图1-虚拟摇杆演示程序 本示例中大约有四个类: Game类 主要包含了初始化、事件处理、纹理绘制等功能,是本示例的核心类; Player...

bull521的博客 1879

cocos2d-x RichText 真实高度

cocos2d-x版本 3.8  在RichText自动换行后,发现不能得到真实高度,查看源码发现算出了实际高度,但确没用上,都多少个版本了,还没完善 void RichText::formarRenderers() { if (_ignoreSize) { float newContentSizeWidth = 0.0f; float

to3 3865

CocosCreator零基础制作游戏《极限跳跃》

转载闭眼就天黑专栏_个人博客_技术源于分享。一个完整的小游戏教程适合小白入手 一、思维导图 二、制作登录场景 首先,打开CocosCreator,新建HelloWorld项目。选择项目路径,输入项目名称“jxty”,点击新建项目。 新建好项目,项目会自动打开。这里大家可以看下官方的文档,了解 下编辑器的功能和用法 点击工具栏上的预览按钮来查看当前场景的显示 在资源管理器中,我们选中Scen...

cnliping的博客 1973

cocos2dx三种定时器的使用

cocos2dx三种定时器的使用以及停止schedule,scheduleUpdate,scheduleOnce

水上漂的专栏 6万+
上一篇: cocos2dx3.X项目重写(五)添加分数,开始和结束场景。
下一篇: A电脑的gho还原到B电脑上的驱动解决方案
Fried_potatoes
博客等级 码龄12年 5粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值