#ifndef __PHYSICSNODES_CCPHYSICSSPRITE_H__

#define __PHYSICSNODES_CCPHYSICSSPRITE_H__

#include "cocos2d.h"

#include "ExtensionMacros.h"

#if CC_ENABLE_CHIPMUNK_INTEGRATION

#include "chipmunk.h"

#elif CC_ENABLE_BOX2D_INTEGRATION

class b2Body;

#else // CC_ENABLE_BOX2D_INTEGRATION

#error "You must define either CC_ENABLE_CHIPMUNK_INTEGRATION or CC_ENABLE_BOX2D_INTEGRATION to use CCPhysicsSprite.h"

#endif

NS_CC_EXT_BEGIN

/** A CCSprite subclass that is bound to a physics body.

It works with:

- Chipmunk: Preprocessor macro CC_ENABLE_CHIPMUNK_INTEGRATION should be defined

- Objective-Chipmunk: Preprocessor macro CC_ENABLE_CHIPMUNK_INTEGRATION should be defined

- Box2d: Preprocessor macro CC_ENABLE_BOX2D_INTEGRATION should be defined

Features and Limitations:

- Scale and Skew properties are ignored.

- Position and rotation are going to updated from the physics body

- If you update the rotation or position manually, the physics body will be updated

- You can't enble both Chipmunk support and Box2d support at the same time. Only one can be enabled at compile time

*/

class CCPhysicsSprite : public CCSprite

{

protected:

bool    m_bIgnoreBodyRotation;

#if CC_ENABLE_CHIPMUNK_INTEGRATION

cpBody  *m_pCPBody;

#elif CC_ENABLE_BOX2D_INTEGRATION

b2Body  *m_pB2Body;

// Pixels to Meters ratio

float   m_fPTMRatio;

#endif // CC_ENABLE_CHIPMUNK_INTEGRATION

public:

CCPhysicsSprite();

static CCPhysicsSprite* create();

/** Creates an sprite with a texture.

The rect used will be the size of the texture.

The offset will be (0,0).

*/

static CCPhysicsSprite* createWithTexture(CCTexture2D *pTexture);

/** Creates an sprite with a texture and a rect.

The offset will be (0,0).

*/

static CCPhysicsSprite* createWithTexture(CCTexture2D *pTexture, const CCRect& rect);

/** Creates an sprite with an sprite frame. */

static CCPhysicsSprite* createWithSpriteFrame(CCSpriteFrame *pSpriteFrame);

/** Creates an sprite with an sprite frame name.

An CCSpriteFrame will be fetched from the CCSpriteFrameCache by name.

If the CCSpriteFrame doesn't exist it will raise an exception.

@since v0.9

*/

static CCPhysicsSprite* createWithSpriteFrameName(const char *pszSpriteFrameName);

/** Creates an sprite with an image filename.

The rect used will be the size of the image.

The offset will be (0,0).

*/

static CCPhysicsSprite* create(const char *pszFileName);

/** Creates an sprite with an image filename and a rect.

The offset will be (0,0).

*/

static CCPhysicsSprite* create(const char *pszFileName, const CCRect& rect);

virtual bool isDirty();

/** Keep the sprite's rotation separate from the body. */

bool isIgnoreBodyRotation() const;

void setIgnoreBodyRotation(bool bIgnoreBodyRotation);

virtual const CCPoint& getPosition();

virtual void getPosition(float* x, float* y);

virtual float getPositionX();

virtual float getPositionY();

virtual void setPosition(const CCPoint &position);

virtual float getRotation();

virtual void setRotation(float fRotation);

virtual CCAffineTransform nodeToParentTransform();

#if CC_ENABLE_CHIPMUNK_INTEGRATION

/** Body accessor when using regular Chipmunk */

cpBody* getCPBody() const;

void setCPBody(cpBody *pBody);

#elif CC_ENABLE_BOX2D_INTEGRATION

/** Body accessor when using box2d */

b2Body* getB2Body() const;

void setB2Body(b2Body *pBody);

float getPTMRatio() const;

void setPTMRatio(float fPTMRatio);

#endif // CC_ENABLE_BOX2D_INTEGRATION

protected:

void updatePosFromPhysics();

};

NS_CC_EXT_END

#endif // __PHYSICSNODES_CCPHYSICSSPRITE_H__


CCPhysicsSprite的更多相关文章

  1. Cocos2d学习之路五(Box2d使用CCPhysicsSprite时编译不通过解决方法)

    cocos2d使用box2d引擎,在使用CCPhysicsSprite添加精灵的时候会出现编译不通过错误. 需要注意以下几点: 1.sprite.position=ccp(p.x,p.y);这行代码一 ...

  2. 使用CocosSharp制作一个游戏 - CocosSharp中文教程

    注:本教程翻译自官方<Walkthrough - Building a game with CocosSharp>,官方教程有很多地方说的不够详细,或者代码不全,导致无法继续,本人在看了G ...

  3. cocos基础教程(3)cocos3.x版本目录结构介绍

    简介 cocos2d-x-3.x版本进行了很多优化,比如:将TTF字体用Atlas缓存,节点重排序官方声称提升了10倍速度,查找.移除节点方面也提高了10%,拆分渲染层到独立的线程运行: 另外,coc ...

  4. cocos2d-x游戏开发 跑酷(四) 关联与物理世界

    原创.转载注明出处http://blog.csdn.net/dawn_moon/article/details/21451077 前面一节尽管实现了一个跑动的人物,可是他只不过一个精灵在运行一个跑动的 ...

  5. Cocos2dx-3.1.1 冒险01----&gt; 文件夹结构、新项目project创建并执行

    windows开发环境:window7.vs2012.python2.7.6 Cocos2d-x 3.1.1的完整文件夹例如以下:比起曾经的2.x的版本号来说分类更规范了 watermark/2/te ...

  6. 让Cocos2dx中的TestCPP中的Box2dTest运行起来

    一般而言,如果你导入TestCPP到VS2012中去后,会编译十几分钟才会出现窗口界面,这是包含Cocos2dx所有功能的一个demo,功能非常齐全强大,里面有两个关于Box2d的测试案例,一个是Bo ...

  7. cocos2d-x高级学习

    弱联网开发技术: libcurl 添加lib文件:libcurl_imp.lib  pthreadVCE2.lib 添加头文件:#include"curl/curl.h" curl ...

  8. ccos2d-x 学习

    渲染驱动方式,事件驱动方式 this->addChild(pSprite, 0); 的第二个参数(int zOrder)表示要添加到this类对象中的顺序.是由里向外的方向.值越大表示越在外面. ...

  9. cocos2d-x分别在Visual Studio和eclipse中设置启用Box2D

    cocos2d-x内嵌有chipmunk和Box2D两个物理库,默认启用的是chipmunk.如果想使用Box2D,可做如下设置.PS:本人所用的版本是cocos2d-x-2.2.5. 一.在Visu ...

随机推荐

  1. java之 单根继承与集合

    1.单根继承 概念: 单根继承,意味着所有类的继承,都继承自单一的基类的继承模式 优点: (1)所有对象都具有一个共用接口,归根到底都是相同的基本类型. (1)所有对象都具有一个共用接口,归根到底都是 ...

  2. shell-code-5-函数

    # 函数必须在使用前定义 # 如果不写return,将以最后一条命令运行结果,作为返回值. return后跟数值n(0-255) myFistFunc(){ read a read b return ...

  3. 常见slave 延迟原因以及解决方法

    一  序言在运维线上M-M 架构的MySQL数据库时,接收的比较多关于主备延时的报警: 点击(此处)折叠或打开 check_ins_slave_lag (err_cnt:1)critical-slav ...

  4. Java使用Robot完成QQ轰炸机

    效果 网上吵架吵不过别人怎么办?女朋友让你从1数到10000怎么办?想恶搞朋友怎么办?QQ轰炸机你值得拥有!(注:为了更好的学习编程,敲的练手项目,仅作学习使用) 自定义发送内容,自定义发送条数,&q ...

  5. SAXException Parser configuration problem: namespace reporting is not enabled

    问题描述: 用sax的方式组装xml,在tomcat上正常运行,在weblogic12c上报错: SAXException Parser configuration problem: namespac ...

  6. jmeter结果分析详解

    Jmeter测试报表相关参数说明 采用Jmeter测试工具对web系统作的负载测试,得出的响应报表,数据比较难懂,现作一具体说明.以下是在一次具体负载测试中得出的具体数值,测试线程设置情况为:线程数: ...

  7. OSPF 提升 一 ----基础

    ospf  ccnp内容   一  link-state protocols      IGP   开放式的最短路径优先协议     公有协议 支持中到大型的网络    spf算法 链路状态协议 1. ...

  8. python3--__call__拦截调用

    __call__拦截调用 当实例调用时,使用__call__方法.不,这不是循环定义:如果定义了,Python就会为实例应用函数调用表达式运行__call__方法.这样可以让类实例的外观和用法类似于函 ...

  9. 【JavaScript 5—基础知识点】:正则表达式(笔记)

    一.总体概览 1.1,什么是正则 又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符 ...

  10. LINQ学习笔记 Join 与 Group join

    LINQ中的Join对应T-SQL中的内连接,并无左连接的方法,当然也没有右连接. 要达成Left join必须依靠GroupJoin来完成. GroupJoin顾名思义就是先集团在做加入,加入的不同 ...