本教程由落羽原创,欢迎转载,转载请注明地址http://blog.csdn.net/cqjianx/article/category/2407957
1.建工程
游戏最重要的就是动画,作为本系列教程的第一篇,动画最合适了。这一节主要包含helloworld程序的讲解以及一个简单动画播放。首先新建一个cocos2dx helloworld工程,建好后看起来是这样。
运行下, 如果没问题了运行起来是这样
2.修改AppDelegate.cpp
接下来我们对程序进行下修改,以便于我们后续的开发。
打开AppDelegate.cpp,修改程序初始化函数
bool AppDelegate::applicationDidFinishLaunching() {
// initialize director
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLView::create("My Game");
director->setOpenGLView(glview);
}
// turn on display FPS
director->setDisplayStats(false); //不显示FPS
glview->setDesignResolutionSize(1280, 800, ResolutionPolicy::EXACT_FIT); //设置屏幕适配尺寸和策略
// set FPS. the default value is 1.0/60 if you don't call this
director->setAnimationInterval(1.0 / 60);
// create a scene. it's an autorelease object
auto scene = HelloWorld::createScene();
// run
director->runWithScene(scene);
return true;
}
做的改动就是把显示FPS去掉,设置屏幕适配尺寸为1280*800,适配策略为EXACT_FIT,
为什么要设置成1280*800? 因为以后教程的动画都是基于1280*800的屏幕来画的,所以这里先设置好,方便接下来的开发。至于适配策略,落羽这里简单讲下,不再深入讲解,
主要有三种,分别是
EXACT_FIT:充满整个屏幕,游戏画面有可能变形。
NO_BORDER:按比例拉伸,不留黑边,游戏画面有可能超出屏幕外。
SHOW_ALL:按比例拉伸,在屏幕内显示整个游戏画面,有可能留下黑边。
3.修改helloword.cpp加入动画
打开helloword.cpp修改初始化函数。
把默认添加的label和背景去掉,添加我们自己的背景, 加载动画创建精灵,播放动画。
bool HelloWorld::init()
{
//
// 1. super init first
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
/
// 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it.
// add a "close" icon to exit the progress. it's an autorelease object
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
origin.y + closeItem->getContentSize().height/2));
// create menu, it's an autorelease object
auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Vec2::ZERO);
this->addChild(menu, 1);
//my code
auto *background = Sprite::create("background.png"); //添加背景
background->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
this->addChild(background);
Vector<SpriteFrame*> frameVector; //动画图片容器
char str[30];
for(int i = 1; i <= 8; ++i) //加载图片
{
sprintf(str, "player1_brother_move_%02d.png", i);
frameVector.pushBack(SpriteFrame::create(str, Rect(0, 0, 600, 400)));
}
auto *animation = Animation::createWithSpriteFrames(frameVector, 0.1);
auto *animate = Animate::create(animation);
auto *action = RepeatForever::create(animate); //创建无限循环动画
auto sprite = Sprite::create();
sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
sprite->runAction(action);
this->addChild(sprite);
return true;
}
当然创建动画有好几种方式,落羽这里只用了一种方式,以后我们会用到其他的方式,这部分内容比较简单,创建下精灵,播放动画,添加子节点,就好了。最后的效果如下。
图片都是落羽自己画的哦,哈哈