cocos2d-x 让小球滚动起来

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

我看的极客学院上的视频,于是自己也动手实现一下,毕竟自己才刚开始学习cocos2d-x

代码把:

这个是HelloWorld类,继承LayerColor

class HelloWorld : public cocos2d::LayerColor
{
public:
    static cocos2d::Scene* createScene();

    virtual bool init();  
    virtual void update(float dt);//这里的update函数是重写了scheduleUpdate里面的update函数,一开始写成了updata,于是小球根本就不会动,这个函数的名字不能错的

    void menuCloseCallback(cocos2d::Ref* pSender);

    CREATE_FUNC(HelloWorld);
private:
    cocos2d::Sprite *  ball;//这里是一个小球
};

这是init函数

bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if (!LayerColor::initWithColor(Color4B(255,255,255)))
    {
        return false;
    }

    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
    //auto b = Sprite::create("p3.png");
    //b->setPosition(200,200);
    //addChild(b);// addChild(b);//一开始是这样子的,这样的代码可以创建出一个小球出来

    ball = Sprite::create("p2.png");
    addChild(ball);
    ball->setPosition(200,200);
    //b->runAction(MoveBy::create(1,Vec2(100,0)));
    //b->runAction(RepeatForever::create(MoveBy::create( 1,0))));
    //这里的runAction也可以让小球运动,但是想要精确的控制小球的运动,还是需要scheduleUpdate函数来实现
    scheduleUpdate();//我们需要自己重写update函数来达到自己想要的目的
    return true;
}

我们自己重写update函数达到自己的目的
主要是为了小球的越界返回原点处理

void HelloWorld::update(float dt)
{
    ball->setPositionX(ball->getPositionX() + 5);//每一帧移动5像素
    Size visibleSize = Director::getInstance()->getVisibleSize();
    //这里是得到可视窗口的大小
    if (ball->getPositionX() > (visibleSize.width + ball->getContentSize().width / 2))
    {//如果要出界了,那我们就要把小球返回原来的初始位置
        ball->setPositionX(ball->getContentSize().width/2);

    }

}

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