2023-06-17
cocos2dx
00
请注意,本文编写于 683 天前,最后修改于 683 天前,其中某些信息可能已经过时。

目录

cocos2dx

官网 https://www.cocos.com/cocos2d-x
官方教程 https://docs.cocos2d-x.org/cocos2d-x/v3/zh/sprites/spritesheets.html

基础知识

导演(director),场景(scene),精灵(sprite), 动作(action),序列(sequence),节点关系,日志输出

导演(director)

场景(scene)

精灵(sprite)

精灵(sprite) ,精灵是您在屏幕上移动的对象, 可以被控制,
并不是每一个图形对象都是精灵,
如果可以控制才是精灵,
不可以控制,则是一个节点(node)
精灵在所有游戏中都很重要,每个游戏都有这样的场景,一个舞台,上面站着一个某一种形式的主角,那主角就是精灵,sprite很容易被创建,它有一些可以被配置的属性,比如,位置,旋转角度,缩放比例,透明度,颜色等等

cocos
// This is how to create a sprite // 这是 如何 创建 一个精灵 auto mySprite = Sprite::create("mysprite.png"); // this is how to change the properties of the sprite // 这是 如何 更改 精灵 属性的 // 500这个属性决定了精灵sprite横向X轴坐标 mySprite->setPosition(Vec2(500, 0)); // 40的值影响精灵sprite 的角度,正40为向右倾斜角度 mySprite->setRotation(40); // 设置精灵尺度比例**'注意:此处为2点0'** mySprite->setScale(2.0); // sets both the scale of the X and Y axis uniformly // 设置锚点,所有节点对象都有锚点值(anchor point) mySprite->setAnchorPoint(Vec2(0, 0));

锚点(anchor point),所有的节点(node)对象都有锚点值,sprite 是 node 的子类,自然也有锚点,锚点是节点对象在计算坐标位置时的一个基准点,锚点对于确定节点对象的位置非常有用,可以在游戏中动态的调整锚点值

动作(action)

创建一个场景,在场景里面增加精灵只是完成了一个游戏的第一步,动作(action)可以让精灵在场景中移动,如从一个点移动到另外一个点,还可以创建一个动作序列(squence),让精灵按照这个序列做连续的动作,在动作过程中,可以改变精灵的位置,旋转角度,缩放比例等等,

auto mySprite = Sprite::create("Blue_Front1.png"); // Move a sprite 50 pixels to the right, and 10 pixels to the top over 2 seconds. auto moveBy = MoveBy::create(2, Vec2(50,10)); mySprite->runAction(moveBy); // Move a sprite to a specific location over 2 seconds. auto moveTo = MoveTo::create(2, Vec2(50,10)); mySprite->runAction(moveTo);

序列(sequence)

能在屏幕上移动精灵sprite,不是一个游戏的全部,还需要一套动作组合, 序列就是多个动作按照特定顺序的一个排列,当然反方执行这个序列也是可行的,
moveto-->delay-->moveby-->delay-->moveto

// 创建sequence auto mySprite = Node::create(); // move to point 50,10 over 2 seconds auto moveTo1 = MoveTo::create(2, Vec2(50,10)); // move from current position by 100,10 over 2 seconds auto moveBy1 = MoveBy::create(2, Vec2(100,10)); // move to point 150,10 over 2 seconds auto moveTo2 = MoveTo::create(2, Vec2(150,10)); // create a delay auto delay = DelayTime::create(1); mySprite->runAction(Sequence::create(moveTo1, delay, moveBy1, delay.clone(), moveTo2, nullptr));

这个例子执行了一个动作的 Sequence 序列,那要是想让所有的特定动作同时执行呢?Cocos2d-x 也支持!通过引擎中的 Spawn 对象,你能让多个动作同时被解析执行。可能不同动作的执行时间不一致,在这种情况下,他们不会同时结束。

auto myNode = Node::create(); auto moveTo1 = MoveTo::create(2, Vec2(50,10)); auto moveBy1 = MoveBy::create(2, Vec2(100,10)); auto moveTo2 = MoveTo::create(2, Vec2(150,10)); myNode->runAction(Spawn::create(moveTo1, moveBy1, moveTo2, nullptr));

图集

图集(sprite sheet)是通过专门的工具将多张图片合并成一张大图,并通过plist等格式的文件索引的资源,使用图集比使用多个独立图像占用的磁盘空间更少,还会有更好的性能
使用图集时,首先会将其全部加载到spriteFrameCache中,spriteFrameCache是一个全局的缓存类,缓存了添加到其中spriteFrame对象,提高了精灵的访问速度,spriteFrame只加载一次,后续一直保存在SpriteFrameCache中
纹理打包机(图集制作工具针对cocos2dx) https://www.codeandweb.com/texturepacker/tutorials/animations-and-spritesheets-in-cocos2d-x

节点关系

cocos2d-x 的 节点关系,是被附属和附属的关系,就像数据结构中的父子关系,如果两个节点被添加到一个父子关系中,那么父节点的属性变化会被自动应用到子节点中。想一下处于父子关系中的精灵有什么特性。
要注意的是,不是所有的父节点属性都会被自动应用到子节点,如改变父节点的锚点只会影响转换效果(比例缩放,位置变化,角度旋转,变形等),不会影响子节点锚点,子节点的锚点总会是左下角 (0,0)。

日志输出

有时,在你的游戏正在运行的时候,为了了解程序的运行过程或是为了查找一个 BUG,你想看到一些运行时信息,可以! 这个需求引擎已经考虑到了,使用 log() 可以把信息输出到控制台,这样使用:

// a simple string log("This would be outputted to the console"); // a string and a variable string s = "My variable"; log("string is %s", s); // a double and a variable double dd = 42; log("double is %f", dd); // an integer and a variable int i = 6; log("integer is %d", i); // a float and a variable float f = 2.0f; log("float is %f", f); // a bool and a variable bool b = true; if (b == true) log("bool is true"); else log("bool is false");

对于使用 C++ 进行游戏开发的用户来说,可能想使用 std::cout 而不用 log(),实际上 log() 更易于使用,它格式化复杂的输出信息更简单