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

来源:互联网 发布:源码天下yuanmatx 编辑:程序博客网 时间:2024/05/16 10:11

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 instancebool 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两三天,瞎学,请大家在下面多多留言提问,指点,互相学习与指导!

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一岁宝宝打喷嚏怎么办 打喷嚏打不出来怎么办 两岁宝宝打喷嚏怎么办 三岁宝宝打喷嚏怎么办 鼻子痒流鼻涕打喷嚏怎么办 鼻子痒流清鼻涕打喷嚏怎么办 老觉得鼻孔干燥怎么办 鼻子突然很痒怎么办 鼻孔里面很痒怎么办 孩子鼻梁肿了怎么办 鼻子外面痒痒的怎么办 孩子鼻梁子磕到硬物上肿了怎么办 过敏鼻炎犯了怎么办 鼻子外面很痒怎么办 鼻子里面很痒怎么办 鼻子外面烂了怎么办 上火鼻子烂了怎么办 孕妇鼻痒打喷嚏怎么办 鼻子内痒流鼻涕怎么办 鼻腔内红肿发炎怎么办 鼻子痒喉咙干怎么办 坐月子鼻子痒打喷嚏怎么办 鼻子下面烂了怎么办 坐月子鼻子不通气怎么办 感冒鼻子痒打喷嚏怎么办 鼻子干燥痒是怎么办 鼻子干又痒怎么办 鼻子太干燥了怎么办 鼻子发痒有血丝怎么办 喷嚏打个不停怎么办 感冒初期鼻子痒怎么办 鼻炎感冒鼻痒怎么办 经期感冒鼻子痒怎么办 感冒鼻子外面痒怎么办 孕妇感冒鼻子痒怎么办 怀孕2个月犯鼻炎怎么办 鼻炎痒的难受怎么办 鼻子干痒出血怎么办 喷嚏发不出来怎么办 鼻子过敏打喷嚏流鼻涕怎么办 孩子老打喷嚏流鼻涕怎么办