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

来源:互联网 发布:制作电子相册的软件 编辑:程序博客网 时间:2024/05/17 20:25

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

我们自己写一个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;}
0 0
原创粉丝点击