在学习SpriteKit做2D游戏开发之前,我看了一点Cocos2D的游戏开发代码,发现Cocos2D和SpriteKit的开发接口以及相关的框架极其相似,就好比C#和Java之间的那种类似程度,这种类似已经达到了令人发指的地步,包括标题中的坐标系系统都是一模一样的。
1.SK中所有在界面上对用户可见的对象都有一个Frame,其实就是一个矩形(CGRect结构体)。所有的矩形被放到window窗体上给用户展示的时候都应该有一个被放置的位置(postion)。假设要把矩形对象A放倒主体对象MainWindow中,那么A的位置就应该以MainWindow的坐标系统为基准进行放置。通常iOS(Single View Application)的界面坐标系(比如UIView等)的原点(0,0)在左上角,而在SpriteKit(以下简称SK)中原点在左下角。所以当我们初始创建出来一个SKView的时候(记作skv),这个时候,我们新建一个SKScene(记作scene)并且使用默认的方式展示(presentScene)将其展示出来时,SKScene就会被完整地展现出来。
2.到了这里所有东西看上去都很正常,但是,此时,再新建一个SKSpriteNode(记作sprite),并加在一张图片进去,使用scene的addChild方法将sprite加入到界面上显示出来时,发现sprite只有右上角的1/4被显示在scene的左下角。
3.要将此sprite完整的在界面上显示出来,我们就需要调整sprite的位置postion,但是通过调整sprite的anchorPoint(翻译出来叫做“锚点”,cocos2D里面好像就是anchor属性)也同样可以实现。
4.锚点的x和y值都在0~1之间。“锚”是船在靠近岸边的时候的一个硕大沉重的铁钩,用来固定船的位置,免得船被水流或者潮水给“冲走了”,sprite的锚呢,实际上就是我们用来标记它的移动基点的,就好比人的腿,我们说“你单脚从A跳到B位置”,实际上就是用我们的某一只脚的位置,从A一次性跳动到了B,我们说“你左脚单脚站立旋转180度”,实际上就是我们缩起右脚,用左脚站立旋转180度。那么显而易见的,当我们设定sprite的位置(position)的时候,就是把它的锚点“anchorPoint”从某个位置移到了某个地方,旋转也是一样的,我们说设置sprite的zRotation的时候,就是按住sprite的锚点不动,旋转一定的角度。当我们再往sprite加入一个新的SKSpriteNode(记作child)的时候,我们设置child的位置为(0,0)时,如果sprite的锚点的位置变化,child的位置也会随之变化,观察一下就能发现sprite的锚点就是它自身坐标系的原点位置。将child的postion设置为point1,(使用swift语法)然后sprite.addChild(point1) ,就是把child的anchor作为基点,将child放置到sprite的anchor位置为原点位置的point1上去。用图来表示一下:
然后将child添加到sprite中:
5.默认情况下SKSprite的锚点为(0.5,0.5),即自己的中心位置。锚点的值的含义表示的是自己的高和宽的比例位置,比如(0,0)则表示左下角,(0,1)左上角,(1,1)为右上角,(1,0)表示的就是右下角。
到此,SpriteKit的坐标系应该差不多就这样了。。。。。。。