cocos2d-x实用效果之BOX2D的圆形包围边界

本文基于cocos2d-x2.2.3,并未在3.0之后的版本下编写,仅仅是提供一个思路,方便日后其他场景使用到该功能点可以参考,也没有详细讲述box2d物理引擎的基础知识,相关知识请自行多参考其他技术文档。

使用box2d物理引擎,通常需要我们自己给定一个边界来限制body的活动范围,最常用的是在屏幕的边界使用四条边来包围,形成一个矩形。但如果我们的需求是在一个圆形范围内,仅仅想通过一个中心点和半径来确定这个范围,该如何处理呢?其实圆弧也可以看成是无数小线段组成的,当线段数目足够多时便无限趋近于圆,因此我们可以在想要做为范围的圆周上面取一定数量的点,将各个点连起来所包围的范围,便可以看做是一个圆形区域。我们需要做的就是确定这些点的坐标,首尾相连就可以围城一个近似圆的区域,当然点数越多越圆,计算量越多,性能越低,所以取适当即可,本文例子中取24个点。

如此一来,我们在创建物理世界初始化的时候,便可以将各个点数据围一个圆形的包围盒,写法如下:

       <span style="font-family:Comic Sans MS;"> //设置重力参数
	b2Vec2 gravity;
	gravity.Set(0.0f,0.0f);
	//创建世界
	m_world = new b2World(gravity);
	//是否允许休眠
	m_world->SetAllowSleeping(true);
	//是否连续物理测试
	m_world->SetContinuousPhysics(true);
	//地面物体定义
	b2BodyDef groundBodyDef;
	groundBodyDef.position.Set(0,0);
	groundBody = m_world->CreateBody(&groundBodyDef);

	//定义点的个数
	float pointNum = 24;
	//定义圆形边界的半径
	radius = 300;
	//定义圆心
	m_center = ccp(640,400);
	//存放点数据的数组
	CCPoint point[24];
	for (int i= 0; i < pointNum; i++) {
		//计算每两个点连成的线段的起始点的角度、坐标(第一个为0°)
		float angle = (float)i/pointNum *PI*2;
		float bx = radius * cos(angle);
		float by = radius * sin(angle);

		//圆心加上偏移量即为当前点坐标
		bx += m_center.x;
		by += m_center.y;
		point[i].setPoint(bx,by);
	}
	point[23].setPoint(point[0].x,point[0].y);

	for(int i= 0; i < pointNum-1; i++)
	{
		//设置边缘范围
		groundBox.Set(b2Vec2(point[i].x/PTM_RATIO,point[i].y/PTM_RATIO),b2Vec2(point[i+1].x/PTM_RATIO,point[i+1].y/PTM_RATIO));
		groundBody->CreateFixture(&groundBox,100);
	}</span>

效果如下:

上面只是给出了主要实现的代码段,仅供参考,也可以下载代码自己运行试试看,根据需要再进行参数的调整,自己mark,免得日后需要的时候找来找去!!代码和资源在下面,请自己创建工程运行

点击下载参考源代码

时间: 2024-10-09 22:06:12

cocos2d-x实用效果之BOX2D的圆形包围边界的相关文章

《JavaScript实用效果整理》系列分享专栏

整理一些使用的JavaScript效果,在Web开发中遇到的比较好的动态效果,都收藏在这里,对以后的网站开发增加不少的色彩 <JavaScript实用效果整理>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201717.html 文章 国外30个使用很酷的JS滑动和滚动效果的网站 速度超快的菜单切换效果 使用Ctrl+Enter提交表单 jQuery Easing 动画效果扩展 超酷的固定菜单页面滚动效果 幸运大转盘-jQuery+PH

jQuery的几种简单实用效果

许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>返回顶部</title> <style type="text/css"> *{ margin: 0; p

Cocos2D v3.4.9粒子效果不能显示的原因分析及解决办法

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在游戏App中为了衬托气氛我们往往使用一些特殊的图形效果,粒子效果无疑是其中最为常用,也最为方便的一种. 正常使用下,粒子效果的确很稳定,但是本猫最近在RPG游戏里却遇到了粒子效果不能显示的问题,调试着实花了一些功夫.现将问题现象,分析以及解决方法记录下来和大家一起分享,也便于以后回忆查找. 问题现象很简单,就是粒子效果不显示-但也不是所有粒子效果都不显示,只

web前端入门到实战:纯HTML做出几个实用网页效果

在我们以往看到的页面效果中,很多效果是需要JS搭配使用的,而今天在本文中,我将介绍如何使用纯HTML打造属于自己的实用效果. 1.?**折叠手风琴** 使用Details和Summary标签可以创建没有JavaScript代码的可折叠手风琴. 效果: ? HTML <details> <summary>Languages Used</summary> <p>This page was written in HTML and CSS. The CSS was

MongoDB实用教程

---------------------------------------------------------------------------------------------------------------[版权申明:本文系作者原创,转载请注明出处]文章出处:http://blog.csdn.net/sdksdk0/article/details/51765219作者:朱培   ID:sdksdk0-----------------------------------------

Android 打造炫目的圆形菜单 秒秒钟高仿建行圆形菜单

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43131133,本文出自:[张鸿洋的博客] 1.概述 今天打开建行看存款,一看伤心欲绝,再看:我擦,这个圆形菜单挺炫.于是,为了掩盖我悲痛的心情,我决定是实现这个效果.好了,其实还有个原因,记得我初学android那会我做的应用被鄙视了,说我的菜单没有建行的好看,那么今天,证明自己的时刻到了.我决定用我做的圆形菜单的控件,32s实现个建行的菜单给他看看,顺便教教他~~ 玩笑开完,

用Canvas制作剪纸效果

在做剪纸效果之前,先介绍剪纸效果运用到的一些知识: 1.阴影: 在Canvas之中进行绘制时,可以通过修改绘图环境中的如下4个属性值来指定阴影效果: shadowColor:CSS格式的颜色字串.默认值为rgba(0,0,0,0),即完全透明的黑色. shadowOffsetX:阴影在X轴方向的偏移量,以像素为单位.默认值为0 shadowOffsetY:阴影在Y轴方向的偏移量,以像素为单位.默认值为0 shadowBlur:表示阴影效果如何延伸的double值.默认值为0.该值用于高斯模糊方程

Android 遮罩层效果

(用别人的代码进行分析) 不知道在开发中有没有经常使用到这种效果,所谓的遮罩层就是给一张图片不是我们想要的形状,这个时候我们就可以使用遮罩效果把这个图片变成我们想要的形状,一般使用最多就是圆形的效果,如下图: 上面这个图片是圆形的,而我们这个原图是正方形的,所以我们可能就需要这么一个遮罩的效果使它变为圆形,这种一般就是我们图片从网络上获取的,形状不是由我们自己定的,所以才会加上这么一个效果,看下面的原图: 这个是一个正方形的,那么要弄这么一个圆形,我们还需要一个圆形全黑的图片,如下 就是这个图片

【Android开源项目分析】自定义圆形头像CircleImageView的使用和源码分析

本文分为三大部分: CircleImageView的使用 CircleImageView源码分析 Android自定义View总结 CircleImageView项目源码下载: https://github.com/hdodenhof/CircleImageView 打开源码会发现主要就是一个继承了ImageView 的类--CircleImageView .java,代码优雅精致,效果很nice.下面会进行源码分析,让我加深了不少Canvas.BitmapShader.Matrix相关知识.