[原创]SpriteKit+Swift学习笔记(一)-父节点坐标系

最近一个月硬是啃下了Swift和SpriteKit,回首这一个月,有垂头丧气,也有得意忘形,但是遇到最多的,还是无助和无奈。众所周知,SpriteKit推出只有一年的时间,虽然苹果文档一直非常坚挺,但是SK和cocos、unity的普及程度、受欢迎程度和易用程度还有很大的距离,所以使用的人也很少。且不说国内资料凤毛麟角,国外相关教程和资料也不是很多,即便找到了,也只能教你如何做小物件和简单的功能,当你遇到自己个性化的需求或者技术问题,就倍感无助了(如果结合Swift语言,就更少的可怜了)。因此,就最近一个月的学习经历,整理出一些常见的问题,希望能帮助到同样在学习的人,节选自我的为知笔记。

坐标系

直接上代码

var pipePair = SKNode()
var pipeUp:SKSpriteNode = SKSpriteNode(texture: pipeUpTexture)
pipeUp.position = CGPointMake(0, y + pipeUp.size.height)
pipePair.addChild(pipeUp)

上面这段代码仿照swift版flappy bird源码所写。坐标系是非常常用也非常重要的一个概念。我们经常会需要添加大量节点到游戏场景中,如何妥善管理各个节点的坐标和从属关系就非常重要。

以上面代码来说,创建了一个SKNode节点pipePair,用来携带一对水管(这里我只添加了一个向上的水管),然后把水管添加到pipePair上。如果我们直接创建两个水管,需要设置两次坐标,两次向左平移动作(细节参见SKAction.moveByX())。如果设置一个父节点,用来携带这两个水管,那么只需要设置父节点的左平移动作,父节点会带着子节点一起向左移动,就像你提着两个水桶走路一样,大大简化了参数设置,子节点不需要设置任何动作就可以和父节点同步运动。不光如此,这样还简化了子节点的坐标设置。

The position of the node in its parent’s coordinate system.
红字部分摘自苹果文档,子节点的坐标是相对父节点来设置的(父节点坐标系原点,默认在父节点的正中心,父节点坐标系中心可以通过archor锚点属性来设置),也就是说,如果水管加到pipePair上,将pipePair设置成在屏幕中央,由右向左移动,那么子节点只需要设置Y坐标,一个在上面,一个在下面,就可以了。

是不是大大激发了你的想象力?坦克上带的炮塔,飞机上带的航炮,英雄手里的武器,汽车上的车灯都是可以这样设置的,能做的东西真是太多了。

注意:

如果父节点被移除,子节点也会被移除。所以坦克打出的炮弹,不能add到坦克节点上,否则坦克消失,炮弹也会立即消失。后面我会详细说节点的用法

    原文作者:敲键盘的猫
    原文地址: https://segmentfault.com/a/1190000000646234
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞