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

cocos2dx3.0游戏编程1-动作游戏之准备工作

2014-07-19 23:41 288 查看
本教程由落羽原创,欢迎转载,转载请注明地址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;
}


当然创建动画有好几种方式,落羽这里只用了一种方式,以后我们会用到其他的方式,这部分内容比较简单,创建下精灵,播放动画,添加子节点,就好了。最后的效果如下。









图片都是落羽自己画的哦,哈哈

本节源码及图片下载http://pan.baidu.com/s/1bnmyzKz
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐