cocos2dx其实也和普通软件开发一样,不外乎一些控件的组合,再配合一些逻辑的处理,就成了我们熟悉的游戏了。
今天就让我们一起来熟悉一下常用的控件
1.在游戏开发中我们把每一个界面称作一个场景(Scene),每一个场景是由很多层(Layer)组成的,每一个层中又包含了很多精灵(Sprite),当然我们别忘了我们最大的指挥官导演(Director)。
接下来我们看一看他们是怎么运作的。
首先在AppDeletegate.cpp中我们看到如下代码
关键在于
- bool AppDelegate::applicationDidFinishLaunching() {
- // initialize director
- auto director = Director::getInstance();
- auto glview = director->getOpenGLView();
- if(!glview) {
- glview = GLViewImpl::create("My Game");
- director->setOpenGLView(glview);
- }
- // turn on display FPS
- director->setDisplayStats(true);
- // 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;
- }
把场景运行起来
- director->runWithScene(scene);
然后进入场景
创建一个场景,再创建一个层,并且把这个层加入到场景中
- Scene* HelloWorld::createScene()
- {
- // 'scene' is an autorelease object
- auto scene = Scene::create();
- // 'layer' is an autorelease object
- auto layer = HelloWorld::create();
- // add layer as a child to scene
- scene->addChild(layer);
- // return the scene
- return scene;
- }
最后执行HelloWorld::init()方法进行一些初始化
2.常用控件
·消息对话框MessageBox
·Log和c语言中的print用法一致
- log("hello cocos");
·标签Label
- LabelTTF *label = LabelTTF::create();
- label->setString("hello");
- label->setFontSize(36);
- label->setPosition(size.width/2,size.height/2);
- addChild(label);
·输入文本TextFieldTTF
这个比较复杂,点击之后要唤起输入法
- //输入文本
- TextFieldTTF *tf = TextFieldTTF::textFieldWithPlaceHolder("在这里输入","宋体",20);
- //设置位置
- tf->setPosition(size.width/2,size.height/2);
- addChild(tf);
- //注册监听
- auto listener = EventListenerTouchOneByOne::create();
- //传递tf
- listener->onTouchBegan = [tf](Touch *t,Event *event){
- if(tf->getBoundingBox().containsPoint(t->getLocation())){
- tf->attachWithIME();
- }else{
- tf->detachWithIME();
- }
- return false;
- };
- //加入监听
- Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraPHPriority(listener,tf);
·菜单Menu
好了,基本空间就介绍到这里,接下来就是不断熟悉的过程了
- 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);