我看的极客学院上的视频,于是自己也动手实现一下,毕竟自己才刚开始学习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);
}
}