当前位置: 首页 > news >正文

Swift - 使用atlas图集实现动画效果(SpriteKit游戏开发)

我们通常继承SKSpriteNode来实现游戏中的元素,除了可以使用图片作为纹理皮肤外。我们还可以使用动画纹理集来实现动画播放。
动画纹理集的制作也很简单,首先要有一套动画序列图,然后把它们放到一个文件夹下,最后把文件夹改名为*.atlas后缀就行了。


下面通过一个“神经猫”动画元件来演示:


--- 神经猫类 Cat.swift ---
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import SpriteKit
 
class Cat : SKSpriteNode {
     
     //神经猫的纹理集
     let dbAtlas = SKTextureAtlas (named: "db.atlas" )
     //神经猫的纹理数组
     var dbFrames = [ SKTexture ]()
     
     override init () {
         //获取纹理集的第一个纹理
         let texture = dbAtlas.textureNamed( "db_01" )
         //获取纹理的尺寸
         let size = texture.size()
         //执行父类的构造方法
         super . init (texture:texture,color: SKColor .whiteColor(),size:size)
         var i: Int
         var tempName: String
         //从纹理集中获取纹理加入数组
         for i=1 ; i <= dbAtlas.textureNames.count ; i++ {
             //%.2d表示两位整数。下面格式化完毕后便是db_01,db_02,db_03等
             tempName = String (format: "db_%.2d" ,i)
             let dbTexture = dbAtlas.textureNamed(tempName)
             dbFrames.append( dbTexture )
         }
         //设置中心点
         self .anchorPoint = CGPointMake (0.5, 0.2)
         //播放动画
         db()
     }
     
     required init (coder aDecoder: NSCoder ) {
         fatalError( "init(coder:) has not been implemented" )
     }
     
     func db(){
         //循环播放纹理动画
         self .runAction( SKAction .repeatActionForever(
             SKAction .animateWithTextures(dbFrames, timePerFrame: 0.2)))
     }
}

--- 元件使用 GameScene.swift ---
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import SpriteKit
 
class GameScene : SKScene {
     
     //利用lazy关键字可以让实例化在第一次使用时才执行
     lazy var cat = Cat ()
     
     //当切换到这个场景视图后
     override func didMoveToView(view: SKView ) {      
         cat.position = CGPoint (x: CGRectGetMidX ( self .frame)-10, y: CGRectGetMidY ( self .frame)-150);
         cat.zPosition = 20
         self .addChild(cat)       
     }
     //响应屏幕点击的方法
     override func touchesBegan(touches: NSSet , withEvent event: UIEvent ) {
         
     }
}

转载于:https://www.cnblogs.com/Free-Thinker/p/4841094.html

相关文章:

  • 【Struts2学习笔记(4)】指定需要Struts 2处理的请求后缀和细说常量定义
  • Java学习之路:ArrayList用法
  • 【Struts2学习笔记(5)】Struts2的处理流程及工作原理
  • 【Struts2学习笔记(6)】Action动态方法调用
  • 【LINUX】主进程、父进程、子进程、守护进程的概念
  • 【Struts2学习笔记(7)】类型转换器的两种方法
  • Swift - 使用MapKit显示地图,并在地图上做标记
  • 【Struts2学习笔记(8)】访问或添加request/session/application属性获取HttpServletRequest / HttpSession / ServletContex
  • ehcache.xml详解
  • 【Struts2学习笔记(9)】单文件上传和多文件上传
  • 如何更改Java默认的花括号对齐方式
  • GET和POST区别和用法
  • 【Struts2学习笔记(10)】自定义拦截器管理权限访问
  • 大型网站提速方案
  • 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的所有方法进行输入校验
  • [译]前端离线指南(上)
  • AHK 中 = 和 == 等比较运算符的用法
  • Android 架构优化~MVP 架构改造
  • CSS 专业技巧
  • ES6之路之模块详解
  • github指令
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaWeb(学习笔记二)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Mybatis初体验
  • Vue2.0 实现互斥
  • win10下安装mysql5.7
  • 测试开发系类之接口自动化测试
  • 从零开始在ubuntu上搭建node开发环境
  • 仿天猫超市收藏抛物线动画工具库
  • 官方解决所有 npm 全局安装权限问题
  • 聊聊flink的BlobWriter
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何胜任知名企业的商业数据分析师?
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 项目实战-Api的解决方案
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • HanLP分词命名实体提取详解
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 大数据全解:定义、价值及挑战
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (HAL库版)freeRTOS移植STMF103
  • (初研) Sentence-embedding fine-tune notebook
  • (多级缓存)缓存同步
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET MVC第五章、模型绑定获取表单数据
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • //解决validator验证插件多个name相同只验证第一的问题