cocos2d-x 新工程的把玩

创建了cocos的工程以及初步了解了工程的结构之后,可以尝试自己改改代码了
游戏窗口的设置
首先是AppDelegate,找到AppDelegate.cpp中AppDelegate::applicationDidFinishLaunching这个成员函数
函数中有几行代码涉及到游戏的一些设置
glview = GLViewImpl::createWithRect("teach", cocos2d::Rect(0, 0, designResolutionSize.width, designResolutionSize.height));//设置窗口的尺寸
director->setDisplayStats(true);//显示FPS
director->setAnimationInterval(1.0f / 60);//设置每帧的间隔
glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);//设置游戏的分辨率
调试信息
以上三行代码是连在一起的,把setDisplayStats后的参数改成false,可以发现helloworld中左下角的FPS和Drawcall信息消失了

窗口尺寸和游戏分辨率
然后讲一下如何修改窗口的尺寸,cocos里有一个叫做Size的类,这个尺寸类的width和height两个成员是我们经常需要使用的,在设置精灵的尺寸啊,坐标的时候会经常使用到
在AppDelegate.cpp的上面可以找到到几行代码
static cocos2d::Size designResolutionSize = cocos2d::Size(480, 320);
static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320);
static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768);
static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536);
这是cocos给我们提供的常用的窗口尺寸,我们可以发现,现在使用的是designResolutionSize这个尺寸,480*320是比较小的,可以把窗口的尺寸设置成 mediumResolutionSize1024 *768
glview = GLViewImpl::createWithRect("teach", cocos2d::Rect(0, 0, mediumResolutionSize.width, mediumResolutionSize.height));

最后将代码改成这样,编译

接下来讲一下分辨率的设置,事实上,虽然我们窗口的尺寸设置成了1024*768,但是实际上游戏窗口里的分辨率还是480*320个像素,打开Resources文件夹我们可以看到HelloWorld.png这个cocos的logo,分辨率是195*270,如果说游戏的分辨率设置成1024*768的话
glview->setDesignResolutionSize(mediumResolutionSize.width, mediumResolutionSize.height, ResolutionPolicy::NO_BORDER);
那么结果是这样的

以上就是游戏窗口的一些参数的设置
精灵
我们可以把精灵(Sprite)当作图片,实际上游戏界面的cocos的logo就是一个精灵,现在我们要把这个精灵替换成可爱的小忍,把小忍扔到项目的Resources文件夹下

打开HelloWorldScene.cpp文件,找到
auto sprite = Sprite::create("HelloWorld.png");
把HelloWorld.png改成小忍图片的图片名shinobu.jpg,编译

啊是小忍,我死了
坐标系统
接下来解释一下cocos的坐标系,首先要介绍一下Vec2类,有接触过图形库或者游戏引擎的同学对这种命名应该都不陌生,这个类代表的是二维向量,有x和y这两个成员,我们在设置游戏物体的坐标的时候会使用到,同样在HelloWorldScene.cpp中,在创建sprite精灵的地方有这么几行代码
auto sprite = Sprite::create("shinobu.jpg");
sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
this->addChild(sprite, 0);
第一行代码的意思是用shinobu.jpg这个图片创建一个精灵
第二行代码使用setPosition设置这个精灵的坐标,有意思的来了,坐标中出现了两个对象,一个是visibleSize和origin
visibleSize这个对象储存了游戏世界的尺寸,也就是我们能够看到的窗口的尺寸,设置游戏的分辨率可以影响这个值,origin指的是窗口左下角的点在游戏世界中的位置
在设置坐标的代码下加入这样一行代码
log("visibleSize.width=%f, visibleSize.height=%f, origin.x=%f, origin.y=%f",
visibleSize.width,
visibleSize.height,
origin.x,
origin.y);
运行,查看输出窗口

可以看到visibleSize和origin的值,log函数当作c语言的printf使用即可用来调试
Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)这个坐标的代码看似很长,实际上意思很简单,就是窗口正中间的位置,我们把坐标改成Vec2(visibleSize.width/4 + origin.x, visibleSize.height/2 + origin.y)试一下

小忍的位置向左移动了1/4窗口宽度的距离
最后一句this->addChile(sprite, 0);是将这个精灵加入到当前图层中,参数0代表最底层,如果不加这行代码,sprite不会成为游戏世界中的一员,编译出来之后就不会显示
cocos2d-x 新工程的把玩的更多相关文章
- Android Studio安装后配置默认新工程目录以及.gradle,.android,.m2和system,config目录
关于在哪里设置:以下所有设置都是在没有打开工程的前提下设置的, Configure > Settings 如图: 不要使用 Configure > Project Defaults> ...
- Vivado2016旧工程IP移动到新工程
前言 在VIVADO中图形化界面生成IP,在旧工程中使用后,如果想在新的工程中使用这个IP但又不想再次生成一次,则就需要把就旧工程中的IP导入到新工程中. 流程 1.旧工程IP生成的目录如下,IP为C ...
- Spring Boot 2 - 初识与新工程的创建
Spring Boot的由来 相信大家都听说过Spring框架. Spring从诞生到现在一直是流行的J2EE开发框架. 随着Spring的发展,它的功能越来越强大,随之而来的缺点也越来越明显,以至于 ...
- 使用git在github上创建新工程
这段时间进经常会忘记如何在github上同步工程,于是又得查资料,查参考书,浪费了很长时间,因此有了感触,写几篇有关此类问题的篇章! 这是老手新手都十分容易犯的错误,就是在创建一个新github项目或 ...
- 对于一个web工程,如果我们复制一个已有的工程粘贴到同一个workspace下,我们除了需要更改工程的名字还需要更改这个新工程的content root,否则会报错。
对于一个web工程,如果我们复制一个已有的工程粘贴到同一个workspace下,我们除了需要更改工程的名字还需要更改这个新工程的content root,否则会报错.步骤如下: 右键新的工程---&g ...
- Python学习---Django的新工程设置模板
该模板完全可以在创建好新工程后进行部分代码替换 创建app01的 python startapp app01 创建static子目录 settings.py """ ...
- 使用Kotlin开发Android应用(II):创建新工程
在基本了解什么是Kotlin以及Kotlin可以做什么之后,接下来就到了配置Android Studio并使用Kotlin开发Android apps的时候了.首次配置Android Studio需要 ...
- Vivado SDK 2014.2 创建新工程后,BSP版本不对的解决办法
问题描述如下: 1. 使用Vivado SDK 2014.2已经创建了工程,但是此时,hdf文件增加了外设,需要重新创建工程以更新SDK中的外设描述: 2. 使用新的hdf创建工程后,发现system ...
- Android下Cocos2d创建HelloWorld工程
最近在搭建Cocos2d的环境,结果各种问题,两人弄了一天才能搞好一个环境-! -_-!! 避免大家也可能会遇到我这种情况,所以写一个随笔,让大家也了解下如何搭建吧- 1.环境安装准备 下载 tadp ...
随机推荐
- django生命周期请求l流程图
django思维导图链接:https://www.processon.com/view/link/5dddb0f8e4b074c442e5c68c
- 关于爬取babycenter.com A-Z为顺序的所有英文名及其详细属性
这一次爬取的内容已经在标题里提到了,下面是详细要求及其图示: 1.首先以A-Z的顺序获取所有英文名,最后爬取该英文名的详细信息. 2.CSV的header以3中的单词为准,请别拼错.如果没有对应的数 ...
- Python活力练习Day5
Day5:连续输入n个字符串,请按照长度为8拆分每个字符串后输出到新的字符串组:长度不是8的整数倍的字符串请在后面补数字0,其中,空字符串不做处理. eg : input : 2 12345 ...
- Winform中使用Timer实现滚动字幕效果(附代码下载)
场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个Fo ...
- c++-重载运算符(+-,++,--,+=,-=,cin,cout)
操作符重载 自定义类型需要操作符重载 运算符重载入门技术推演 友元函数和成员函数实现2元运算符重载 友元函数和成员函数实现1元运算符重载(前置++,前置--,后置++,后置--) 友元函数实现运算符重 ...
- php yii 查看帮助时会调用具体脚本类的析构函数
现象 执行 php yii 查看脚本有什么命令的时候,发现会调用我一个类中的析构函数的命令.并且不是一次调用,是3次,截图中有两次,还有一次输出完析构函数所在的类中的命令之后. 分析原因 在析构函数中 ...
- 松软科技Web课堂:JavaScript Break 和 Continue
break 语句“跳出”循环. continue 语句“跳过”循环中的一个迭代. Break 语句 在本教程稍早的章节中,您已见到了 break 语句.它被用于“跳出” switch 语句. brea ...
- mysql分表之水平分割
一.背景 老大安排要对某张大容量表进行分割,根据年份分割成多张表. 二.水平分割 水平拆分是指数据表行的拆分,表的行数超过百万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放. 定义规则分表后 ...
- Hive 性能测试工具 hive-testbench
下载: yum -y install gcc gcc-c++ maven 下载地址Github:https://github.com/hortonworks/hive-testbench/git cl ...
- 文件系统常用命令与fdisk分区
一.硬盘结构 1.硬盘的逻辑结构 硬盘的大小是使用"磁头数×柱面数×扇区数×每个扇区的大小"这样的公式来计算的.其中磁头数(Heads)表示硬盘总共有几个磁头,也可以理解成为硬盘有 ...