使用swift实战游戏
一、构建项目
二、在MainScene.swift中定义背景图、地面图、精灵
1.1创建背景图
由于背景图是可以拉伸的,因此为了适配全屏,需要在X Y 方向放大
此处的疑问,多个资料显示的是在scene中创建Layer层;但是CALayer是继承自NSObjec,而不是框架的CCNode所以,没有找到,目前实现的方式是通过自定义Layer层继承自CCNode。感觉貌似不对,查看文档,没有发现Layer类。
需要设置Layer的position值和positionType类型
1.2创建地面图
同样应该是使用一个层,或者直接使用Node节点,将图片固定在某个位置,但是是否需要适配其他的屏幕,而需要相对的坐标。
1.3创建精灵sprite
使用ccactionmoveby and CCActionMoveTo两个Action,然后使用CCActionSecquence将这两个动作顺序使用,最后使用CCActionRepeatForever重复使用该队列。保证了精灵一直处于上下跳动。
1.4为精灵的移动使用控制按钮
CCActionButton.setTarget
1.5坐标系的问题
使用ccpDistance,计算两个点之间的距离,但是涉及到了坐标系的问题,目前还有细节不清楚!后续补充
多个坐标系,一个通用的UI坐标系,是左上角为原点,x 轴横向, y轴纵向。
cocos2d坐标系:右手笛卡尔坐标系,x 左延伸,y向上
使用cocosCreater的例子在ios中使用swift构建游戏,参考cocosCreater文档中的实例
http://www.cocos.com/docs/creator/
在设置了position后,计算的distance总是不对,分析是当前的移动的精灵是使用的世界坐标系,而固定的星星是使用的笛卡尔坐标系,因此需要将移动的精灵和星星都使用世界坐标系来计算距离,convertToWorldSpace
最后采用了将坐标系转换为屏幕坐标系convertToWorldSpace,计算的两个位置,最小也是5,不能达到预期的距离0,最后距离的设计临界值为40;
1.6定时和计时器的两个类
cctimer ccscheduler
通过使用schedule(#selector(MainScene.gameover), interval: 10)才能生成CCTimer,而CCTimer对象是可以取消计时器的功能的,及timer.invalide
这样就可以重新的添加计时器;
1.7ccaction的停止和运行
对于CCAction的停止可以使用名称也可以使用tag值,停止后我理解是释放了该对象,而需要重新添加action.
对于停止的位置,就是下一次action运行的起始位置,因此需要重新精灵的起始位置。