您的位置:首页 > 移动开发 > Cocos引擎

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

2016-03-22 16:09 351 查看
上一篇博客写的是一个小球边界碰撞,这个博客是讲的是多个小球边界碰撞。

我们自己写一个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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: