[针对初学者]Cocos 瞎搞小技巧1

1 如何实现界面全屏

在AppDelegate.cpp中

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if (!glview) {
        glview = GLViewImpl::createWithRect("TGame", Rect(0, 0, 960, 640));
        director->setOpenGLView(glview);
    }
    // ......
}

这行代码是用设置窗口大小:

glview = GLViewImpl::createWithRect("TGame", Rect(0, 0, 960, 640));

但是我们需要设置全屏,如何设置呢?将该行代码改为如下:

glview = GLViewImpl::createWithFullScreen("TGame");

2 Tiled创建地图参数设置注意事项

第一次设置地图总是出问题,经过多次尝试和百度,发现下面这个参数是OK的。
只用注意: Tile Layer Format
里面有好几种,我们选择XML
其他不用改动,这时候加载就不会出问题了。

    CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    auto map = CCTMXTiledMap::create("map.tmx");
    map->setAnchorPoint(ccp(0.5f, 0.5f));
    map->setPosition(ccp(winSize.width / 2.0f, winSize.height / 2.0f));
    addChild(map);

其实CCTMXTiledMap这个类名以及告诉我们该如何选择这个配置了。
另外下面两行是用来设置地图居中显示:
map->setAnchorPoint(ccp(0.5f, 0.5f));
map->setPosition(ccp(winSize.width / 2.0f, winSize.height / 2.0f));

3 获取窗口大小和原点坐标

visibleSize 是窗口尺寸,origin 是窗口原点坐标

    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

4 获取屏幕尺寸

    int width = GetSystemMetrics(SM_CXSCREEN);
    int height = GetSystemMetrics(SM_CYSCREEN);

5 场景切换

goScene为新场景类:

Director::getInstance()->replaceScene(goScene::createScene());

6 新场景初始文件.c和.h

MyScene.h

#ifndef __MyScene_H__
#define __MyScene_H__

#include "cocos2d.h"

class MyScene : public cocos2d::Layer
{
public:
    // there's no 'id' in cpp, so we recommend returning the class instance pointer
    static cocos2d::Scene* createScene();

    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
    virtual bool init();

    // implement the "static create()" method manually
    CREATE_FUNC(MyScene);
};

#endif // __MyScene_H__

MyScene.c

#include "MyScene.h"
#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h"

USING_NS_CC;

using namespace cocostudio::timeline;

Scene* MyScene::createScene()
{
    // 'scene' is an autorelease object
    auto scene = Scene::create();

    // 'layer' is an autorelease object
    auto layer = MyScene::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

// on "init" you need to initialize your instance
bool MyScene::init()
{

    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }

    auto rootNode = CSLoader::createNode("MyScene.csb");

    addChild(rootNode);

    return true;
}

在使用这段代码的时候,可以通过替换把MyScene替换成你想要的类名。

7 同级场景切换

MyScene是你接下来想进入同级场景(这个地方不是很肯定,懂的人给指点下):

Director::getInstance()->replaceScene(MyScene::createScene());

8 进入子场景

MyScene是你接下来想进入的子场景

    auto scene = MyScene::createScene();
    // run
    director->runWithScene(scene);

9 设置屏幕分辨率与插入控件尺寸一样

该操作是用来解决插入的内容不能将屏幕铺满的问题。
下面两行代码放在新场景init()函数中。

    auto director = Director::getInstance();
    director->getOpenGLView()->setDesignResolutionSize(352, 352, ResolutionPolicy::SHOW_ALL);

下面是设置之后,与没设置直接的区别
这里写图片描述
这里写图片描述

10 加入Cocos Studio创建的场景

MainScene.csb为Cocos Studio创建的场景

    auto rootNode = CSLoader::createNode("MainScene.csb");
    addChild(rootNode,0);

11 获取Cocos Studio创建的场景*.csb中的变量

比如我们在场景中加入了一个Button的变量,下面是获取控件的办法,并且设置控件响应事件。

    auto startButton = (ui::Button*)rootNode->getChildByName("Button");
    startButton->addTouchEventListener(CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));

12 CC_CALLBACK_1回调函数

函数参数一定要注意:一定有Ref * pSender

void HelloWorld::menuStartCallback(Ref* pSender)
{
    // To Add Your Code

}

到此还没有完,你还必须在类里面添加函数声明,这个大家都知道,不用废话。

13 动态添加控件

就拿一个Menu来举个例子,下面代码是添加了两个Menu,分别是closeItem和startItem。

    auto closeItem = MenuItemFont::create("Exit", CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    auto startItem = MenuItemFont::create("Start", CC_CALLBACK_1(HelloWorld::menuStartCallback, this));

    closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width / 2,
        origin.y + closeItem->getContentSize().height / 2));
    startItem->setPosition(Vec2(origin.x + visibleSize.width / 2 - startItem->getContentSize().width / 2,
        origin.y + visibleSize.height/4 + startItem->getContentSize().height / 2));
    // create menu, it's an autorelease object
    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Vec2::ZERO);
    this->addChild(menu, 1);
    menu = Menu::create(startItem, NULL);
    menu->setPosition(Vec2::ZERO);
    this->addChild(menu, 1);

至于其他控件如何添加也无非这几步,(1)创建控件;(2)设置位置;(3)关联(有的控件不需要关联);(4)插入

14 静态添加控件

主要看第11个如何获取场景中的控件,静态添加就是在场景中添加完成,并且已经设置完位置,我们只需要让其与回调函数关联起来,看12如何用写回调函数。


接触Cocos两三天,瞎学,请大家在下面多多留言提问,指点,互相学习与指导!

猜你喜欢

转载自blog.csdn.net/ieczw/article/details/50935932