CCPhysicsSprite

#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__


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值