cocos2d-x 让多个小球边界碰撞

前端之家收集整理的这篇文章主要介绍了cocos2d-x 让多个小球边界碰撞前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

上一篇博客写的是一个小球边界碰撞,这个博客是讲的是多个小球边界碰撞。

我们自己写一个class

class ball :public   Sprite{// :warning ball后面有,public后面没有(这里千万不要看)

public:
    virtual bool init();

    CREATE_FUNC(ball);
    virtual void update(float dt);//我们依然重写update函数达到我们自己需要的
private:
    float speedX,speedY;
    Size  visibleSize;//这里是速度,和可视窗口的大小
};

我们重写的函数

void ball::update(float dt){
    setPosition(getPositionX()+speedX,getPositionY()+speedY);//我们先让小球运动这一次,其实我觉得应该在运动前判断是否越界的
    float sw = visibleSize.width,sh = visibleSize.height,bw = getContentSize().width/2,bh= getContentSize().height/2;
    float bx = getPositionX(),by = getPositionY();//我们把参数先保存起来

    //判断是否越界,越界之后我们只需要把速度取负
    if (bx <= bw || bx >= (sw - bw)){
        speedX = -(speedX);
    }
    else if (by<=bh || by>=(sh-bh)){
        speedY = -(speedY);
    }

还有我们创建的球

bool ball::init(){

Sprite::initWithFile("ball.png");

visibleSize = Director::getInstance()->getVisibleSize();//获得可视窗口的大小
speedX = CCRANDOM_0_1() * 10 - 5;
speedY= CCRANDOM_0_1() * 20- 5;//随机生成小球的位置
scheduleUpdate();//更新
return true;

}

bool HelloWorld::init()
{
    if (!LayerColor::initWithColor(Color4B(155,199,255,255)))
    {
        return false;
    }

   Size  visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

    for (int i = 0; i < 15; i++){
        auto b = ball::create();
        b->setPosition(CCRANDOM_0_1() * 100 + 100 + CCRANDOM_0_1() * 100,CCRANDOM_0_1() * 200 + 100);
        addChild(b);
    }
    return true;
}

猜你在找的Cocos2d-x相关文章