文档章节

quick-cocos2d-x物理引擎之chipmunk(一)

lonewolf
 lonewolf
发布于 2013/11/01 14:56
字数 972
阅读 10778
收藏 9

chipmunk是一个用C写成的物理引擎,quick-cocos2d-x已经用C++对其进行封装,导出到lua的类有:

CCPhysicsWorld
CCPhysicsBody
CCPhysicsShape
CCPhysicsDebugNode
CCPhysicsCollisionEvent
CCPhysicsVector

可以看出,quick-cocos2d-x没有对joint(连接)进行封装,下面将就如何在quick-cocos2d-x中使用chipmunk作详细的介绍。

一、简介
1、World,Body,Shape可用下图说明其关系

可以看出,World由Body组成,而Body又由Shape组成。就像我们所处的世界一样,世界由房屋,树木等等构成,而房屋由门窗,墙壁等组成,树木由叶子,树干,树枝等组成。
2、CCPhysicsDebugNode
是用于显示各个物体的边框等等信息,主要用于调试。
3、CCPhysicsCollisionEvent
是物体之间发生碰撞时产生的事件,事件中携带有碰撞时的信息。
4、
CCPhysicsVector则是向量,物体受力时将会用到。

二、使用流程

1、建立World
我们要使用chipmunk,首选要建立一个世界(CCPhysicsWorld)

-- 建立没有引力的世界
CCPhysicsWorld:create()
-- 指定两个方向上的引力
CCPhysicsWorld:create(gravityX, gravityY)
示例:
-- 引力向下的世界(跟地球类似)
self.world=CCPhysicsWorld:create(0,-200)
self:addChild(self.world)
2、建立Body
在chipmunk里,Body分为两种:static和非static(普通),static是固定不动的;形状上可以分为长(正)方形、圆形、多边形和自定义类型,建立它们的方法也很多。
1)可以通过Word里的方法创建:
-- 当mass<=0时会创建一个StaticBody
World:createBoxBody(mass, width, height)
-- offset为偏移量
World:createCircleBody(mass, radius, offsetX, offsetY)
-- vertexes格式为{x1, y1, x2, y2, x3, y3},目前的版本有bug,不可以设置offset
World:createPolygonBody(mass, vertexes, offsetX, offsetY)
示例:
local body = self.world:createBoxBody(10, 100, 100)
local body = self.world:createCircleBody(0, 20, 50, 50)
-- 创建一个三角形
local vertexes = {0,0,50,50,100,0}
local body=self.world:createPolygonBody(0, vertexes)
2)通过Body里的方法创建:
CCPhysicsBody:createStaticBody(world)
CCPhysicsBody:create(world, mass, moment)
示例:
local body = CCPhysicsBody:createStaticBody(self.world)
-- 这种创建方式要记得把body放到world里
self.world:addBody(body)
3)重要属性或方法:
-- 摩擦系数 0-1.0
body:setFriction(friction)
-- 反弹系数 0-1.0
body:setElasticity(elasticity)
-- 是否是感应
body:setIsSensor(isSensor)
body:isSensor()
-- 速度
body:setVelocity(velocityX, velocityY)
-- 角速度
body:setAngleVelocity(velocity)
-- 推力
body:applyForce(forceX, forceY, offsetX, offsetY)
body:applyForce(force, offsetX, offsetY)
body:applyImpulse(forceX, forceY, offsetX, offsetY)
body:applyImpulse(force, offsetX, offsetY)
4)删除
-- unbind=true时将解除绑定的CCNode,但不会从场景里删除node,只是执行CC_SAFE_RELEASE_NULL(node);
-- unbind=false时CCNode将继续绑定在该Body上,默认为true
body:removeSelf(unbind)
World:removeBody(body, unbind)
World:removeBodyByTag(tag, unbind)
3、建立Shape
Shape要放置于Body中,一般情况下是不需要单独再建立Shape的,上面创建Body的时候很多就已经创建有一个Shape了
当一个Body由多个独立的部分组成时(比如一个人由头部,手,脚,身体组成),则要通过创建多个Shape来完成了。

1)Shape
的创建都是由Body的方法来完成。
-- 线段,lowerLeft和lowerRight为CCPoint,thickness为粗细
Body:addSegmentShape(lowerLeft, lowerRight, thickness)
Body:addCircleShape(radius, offsetX, offsetY)
Body:addBoxShape(width, height)
-- 目前好像不能运行,已发issue到官方仓库
Body:addPolygonShape(vertexes, offsetX, offsetY)

2)Shape的属性

-- 摩擦系数 0-1.0
shape:setFriction(friction)
-- 反弹系数 0-1.0
shape:setElasticity(elasticity)
-- 是否是感应
shape:setIsSensor(isSensor)
shape:isSensor()
3)删除
body:removeShape(shapeObject)
body:removeShapeAtIndex(index)
body:removeAllShape()
4、绑定
之前我们都只是建立物理世界里的物体,并没有把它们同外观联系起来,比如把一个Box同一张箱子的图片结合在一起,这个就叫做绑定,在quick-cocos2d-x里可以通过
-- node为CCNode类型
Body:bind(node)
Body:unbind()
来完成绑定和解绑。
5、调试
很简单,只要加入以下代码即可:
self.worldDebug=self.world:createDebugNode()
self:addChild(self.worldDebug)


以上就是quick-cocos2d-x中使用chipmunk的过程,有些成员方法没有一一指出,大家可自行翻看源码来了解。下一篇我将会讲到碰撞部分

© 著作权归作者所有

共有 人打赏支持
lonewolf

lonewolf

粉丝 118
博文 55
码字总数 17988
作品 2
湛江
程序员
quick-cocos2d-x物理引擎之chipmunk(二)

上一篇讲了quick-cocos2d-x使用chipmunk的使用流程,介绍了World,Body,Shape的建立,这一篇将讲解如何处理物体之间的碰撞。 一、监听事件 quick-cocos2d-x中的chipmunk碰撞处理是通过监听事件...

lonewolf
2013/11/02
0
0
cocos2d-X学习之引擎源码目录结构介绍

Cocos2d-x的目录结构如下: 目录的具体结构介绍如下: Box2D:物理引擎Box2D的相关源文件 Chipmunk:物理引擎chipmunk的相关源文件 cocos2dx:cocos2d-x引擎的核心部分,存放了引擎的大部分源...

长平狐
2012/08/29
1K
0
Cocos2d-js中Chipmunk引擎

我们先介绍轻量级的物理引擎——Chipmunk。Chipmunk物理引擎,由Howling Moon Software的Scott Lebcke开发,用纯C编写。Chipmunk的下载地址是http://code.google.com/p/chipmunk-physics/,技...

智捷课堂
2015/04/10
0
0
Visual Studio 2012下Box2D开发环境设置

Cocos2d-x 3.x默认情况下采用的物理引擎是Chipmunk,如果我们要使用Box2D引擎,需要进行一些设置和调整,而且不同的开发平台下这些设置也有所不同。由于本书在此之前介绍的都是基于微软的Vis...

智捷课堂
2014/10/07
0
0
cocos2d-x js模版修改

创建cocos2d-x项目,导入引擎模版,避免每次都拷贝引擎到项目中,修改路径: D:commonscocos2d-xcocos2d-2.1rc0-x-2.1.3templatemsvcCCAppWiz.win32Scripts1033下的js文件如下: // Additio...

石头哥哥
2013/08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
今天
1
0
WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
16
2
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部