精灵(Sprite)

不知你是否意识到,所有的游戏都有 精灵(Sprite) 对象,精灵是您在屏幕上移动的对象,它能被控制。你喜欢玩的游戏中主角可能就是一个精灵,我知道你在想是不是每个图形对象都是一个精灵,不是的,为什么? 如果你能控制它,它才是一个精灵,如果无法控制,那就只是一个节点(Node)。

看下面的图片,我们来指出一下,哪个是精灵(Sprite),哪个是节点(Node)。

精灵(Sprite)  - 图1

精灵在所有游戏中都很重要,每个游戏都有这样的情景:一个舞台,上面站着一个某种形式的主角,那主角就是精灵。Sprite 很容易被创建,它有一些可以被配置的属性,比如:位置,旋转角度,缩放比例,透明度,颜色 等等。

  1. // This is how to create a sprite
  2. auto mySprite = Sprite::create("mysprite.png");
  3. // this is how to change the properties of the sprite
  4. mySprite->setPosition(Vec2(500, 0));
  5. mySprite->setRotation(40);
  6. mySprite->setScale(2.0); // sets both the scale of the X and Y axis uniformly
  7. mySprite->setAnchorPoint(Vec2(0, 0));

让我们举例说明每个属性的含义,思考下面不同截图中精灵的区别:

精灵(Sprite)  - 图2

设置位置 mySprite->setPosition(Vec2(500, 0));

精灵(Sprite)  - 图3

现在这个精灵的位置就变成了,我们设置的新地方。

设置旋转角度 mySprite->setRotation(40);

精灵(Sprite)  - 图4

可以发现这个精灵已经被旋转了设置的角度

设置缩放比例 mySprite->setScale(2.0);

精灵(Sprite)  - 图5

看到了精灵的大小,由于我们设置缩放而变化了。

我们再来说一下 锚点(anchor point) ,所有的节点(Node)对象都有锚点值,SpriteNode 的子类,自然也具有锚点。锚点是节点对象在计算坐标位置时的一个基准点。

以我们刚才的展示的精灵为例,设置锚点(0,0):

  1. mySprite->setAnchorPoint(Vec2(0, 0));

精灵的左下角就变为了 setPosition() 调用,计算坐标的基础。再看看其它的锚点效果:

精灵(Sprite)  - 图6精灵(Sprite)  - 图7精灵(Sprite)  - 图8精灵(Sprite)  - 图9精灵(Sprite)  - 图10

注意每张图片中的红点,红点表示锚点的位置。

正如你所看到的那样,锚点对于确定节点对象的位置是非常有用的,你可以在你的游戏中动态的调整锚点值以实现你想要的效果。

现在我们可以静态调整精灵的各个方面,但是你要想这些属性按照时间自动变化该如何做呢? 继续阅读,很快你就会有答案。