[针对初学者]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两三天,瞎学,请大家在下面多多留言提问,指点,互相学习与指导!
- [针对初学者]Cocos 瞎搞小技巧1
- [针对初学者]Cocos 瞎搞小技巧2
- [针对初学者]Cocos 如何提高编译速度
- [Cocos2d-x][Cocos小技巧][1][触摸屏蔽]
- 适合于初学者的一些小技巧
- python小技巧(初学者适用)
- [转]初学者JavaScript 小技巧总结
- 《送给初学者的五个调试小技巧》
- powerdesigner使用小技巧——针对Oracle数据库
- 编写HTML的一些小技巧(针对IE)
- 针对 google 图片搜索的小技巧,嘿嘿
- 小技巧,使用jquery针对已有table进行处理
- vim小技巧--针对换行符进行操作
- 瞎搞
- 瞎搞
- linux下C语言查询mysql数据库小问题(针对初学者)
- VB6.0初学者的十个编程小技巧
- VB6.0初学者的十个编程小技巧
- HDU 1174 爆头 [计算几何]
- 应用服务器集群下的session保持问题
- c语言将数组全部赋0的方法
- UVA 10817 Headmaster's Headache - 状压dp
- 从头到尾解析Hash 表算法
- [针对初学者]Cocos 瞎搞小技巧1
- SDUT 3503 有两个正整数,求N!的K进制的位数
- mysql的外键约束
- flask与MySQL的配置操作
- 选拔赛专用题(2)模板
- 课外转载-js验证表单
- 【leetcode】Array——Find Minimum in Rotated Sorted Array(153)
- C语言第三篇:C语言数据类型及各数据类型所占内存字节数
- ubuntu14.04下CPU的caffe配置,不成功的朋友请与我(lee)联系,后面附带邮箱