经过较为繁琐的环境搭建后, 我们终于运行出了一个 helloworld 窗口, 可以正式上手 cocos 了
现在我们就从改代码开始玩起
窗口
我们之前讲到 AppDelegate 类是程序的入口, 所以和窗口有关的设置也在这个类里, 打开我们的 AppDelegate.cpp, 从 AppDelegate::applicationDidFinishLaunching 这个成员函数看起
函数中有几行代码涉及到游戏的一些设置
这里面有几个基础的可选项:
- glview = GLViewImpl::createWithRect(
- "Test", 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 两个成员是我们经常需要使用的, 在设置精灵的尺寸, 坐标的时候会经常使用到
- Copystatic 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 是比较小的, 可以把窗口的尺寸设置成 mediumResolutionSize, 它的 size 是(1024, 768)
将下面这个 designResolutionSize 参数改成 mediumResolutionSize 即可:
运行:
画面分辨率
现在虽然我们窗口的尺寸设置成了 1024*768, 但是实际上游戏窗口里的分辨率还是 480*320 个像素
打开项目目录的 Resources 文件夹我们可以看到 HelloWorld.PNG 这个图片的分辨率是 195*270
你可以试试把我们换上去的 mediumResolutionSize 再换成 largeResolutionSize, 这个图标在窗口里还是 480*320 那么大的
精灵
精灵 (Sprite) 是 cocos 里的一个概念, 我们 helloworld 界面的 cocos 的 logo 就是一个精灵, 现在我们尝试把他换成别的图片, 选一张图片放到项目目录的 Resources 文件夹内
控制这个精灵的代码在 HelloWorldScene.cpp 内, 打开找到这段代码:
把 HelloWorld.PNG 修改成你放入 Resources 内的图片名即可
运行:
坐标系统
要了解 cocos 的坐标系统, 首先要介绍一下 Vec2 类, 有接触过图形库或者游戏引擎的同学对这种命名应该都不陌生, 这个类代表的是二维向量, 有 x 和 y 这两个成员, 我们在设置游戏物体的坐标的时候会使用到
同样在 HelloWorldScene.cpp 中, 在创建 sprite 精灵的地方有这么几行代码, 就是我们刚才换图片的那里
- // position the sprite on the center of the screen
- sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
这行代码就是使用 setPosition 设置初始化好的精灵 (你的图片) 的坐标, 有意思的来了, 坐标中出现了两个对象, 一个是 visibleSize 和 origin,visibleSize 这个对象储存了游戏世界的尺寸, 也就是我们能够看到的窗口的尺寸, 设置游戏的分辨率可以影响这个值, origin 指的是窗口左下角的点在游戏世界中的位置
在设置坐标的代码下加入这样一行代码输出一些信息(log 函数可以当作 c/c++ 的 printf 使用)
- log("visibleSize.width=%f, visibleSize.height=%f, origin.x=%f, origin.y=%f",
- visibleSize.width,
- visibleSize.height,
- origin.x,
- origin.y);
运行, 查看输出窗口
可以看到 visibleSize 和 origin 的值
再回看设置坐标的代码
- // position the sprite on the center of the screen
- sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
实际上意思很简单, 就是 set 到了窗口正中间的位置, 我们把坐标改成
Vec2(visibleSize.width/4 + origin.x, visibleSize.height/2 + origin.y)
向左移动了 1/4 窗口宽度的距离
最后一句
this->addChile(sprite, 0);
是将这个精灵加入到当前图层中, 参数 0 代表最底层, 如果不加这行代码, sprite 不会成为游戏世界中的一员, 编译出来之后就不会显示
来源: https://www.cnblogs.com/zhxmdefj/p/11686396.html