加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 16:58:42 所属栏目:百科 来源:网络整理
导读:上一篇博客写的是一个小球边界碰撞,这个博客是讲的是多个小球边界碰撞。 我们自己写一个class class ball : public Sprite{ // :warning ball后面有,public后面没有(这里千万不要看) public : virtual bool init (); CREATE_FUNC(ball); virtual void upda

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

我们自己写一个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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读