cocos2d-x 实现 愤怒的小鸟 橡皮筋


经过摸索, 终于实现了angry birds中的橡皮筋.

首先要知道它用Weld Joint(焊接关节), Mouse Joint(鼠标关节)和Distance Joint(距离关节).

Weld Joint: 把小鸟固定在弹弓上.

Mouse Joint: 用来拖拽小鸟.这个好理解.

Distance Joint: 用来保持小鸟和弹弓之间的距离. 但是用的时候得有技巧.

步骤:

1. init:先用weldJoing把小鸟固定在弹弓中间位置. 可以是地面, 固定点在弹弓上, 这样Box2D可以少处理弹弓这个Body.

2. TouchBegan: 把weldJoint摧毁, 创建一个MouseJoint, 让小鸟跟随手指移动.

3. TouchMove: 如果小鸟被拖出弹弓一定距离, 创建一个Distance Joint, 让小鸟跟弹弓保持一定距离不变. 相当于给了一个弹弓最大拉伸度. 同时画两条线模仿皮筋.

4. TouchEnd: 手放开, 小鸟要飞了.这时要摧毁Distance Joint 和 Weld Joint, 让小鸟不再受限制, 同时给小鸟一个直线速度朝着弹弓中间飞出去.


上代码:

#import "cocos2d.h"
#import "box2d.h"
#import "PauseLayer.h"
#import "LevelScene.h"
#import "EKSprite.h"


USING_NS_CC;

class Level1Layer : public LevelScene {
public:
    Level1Layer();

    ~Level1Layer();

    CC_SYNTHESIZE(PauseLayer*, _pauseLayer, PauseLayer);
    CREATE_FUNC(Level1Layer);

    virtual void levelInit();

    virtual void ccTouchesBegan(cocos2d::CCSet *touches, cocos2d::CCEvent *event);

    virtual void ccTouchesMoved(cocos2d::CCSet *touches, cocos2d::CCEvent *event);

    virtual void ccTouchesEnded(cocos2d::CCSet *touches, cocos2d::CCEvent *event);

    virtual void ccTouchesCancelled(cocos2d::CCSet *touches, cocos2d::CCEvent *event);

    virtual void update(float dt);

private:
    EKSprite *_currBird;
    CCSprite *_slingshot;
    CCSpriteBatchNode *_parent;
    b2World *_world;
    b2Body *_groundBody;
    b2MouseJoint *_mouseJoint;
    b2DistanceJoint *_disJoint;
    b2WeldJoint *_weldJoint;
    bool _isPulling;

};

#import "Level1Layer.h"
#include "EKShapeCache.h"
#include "EKHelper.h"
#include "LineLayer.h"
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值