上一篇博客写的是一个小球边界碰撞,这个博客是讲的是多个小球边界碰撞。
我们自己写一个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/@H_502_60@2,bh= getContentSize().height/@H_502_60@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(@H_502_60@155,@H_502_60@199,@H_502_60@255,@H_502_60@255))) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); for (int i = @H_502_60@0; i < @H_502_60@15; i++){ auto b = ball::create(); b->setposition(CCRANDOM_0_1() * @H_502_60@100 + @H_502_60@100 + CCRANDOM_0_1() * @H_502_60@100,CCRANDOM_0_1() * @H_502_60@200 + @H_502_60@100); addChild(b); } return true;}总结
以上是内存溢出为你收集整理的cocos2d-x 让多个小球边界碰撞全部内容,希望文章能够帮你解决cocos2d-x 让多个小球边界碰撞所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)