Playground输出的代码 ,注意右侧打印出的SpriteNode输出值,HAPPY_NODE的输出信息一致.

SpriteNode
//MARK:- 扩展SkSpriteNode属性
extension SKSpriteNode {
func copyWithPhysicsBody()->SKSpriteNode{
let spriteNode = self.copy() as! SKSpriteNode
spriteNode.physicsBody = self.physicsBody
return spriteNode
}
}

那么我们为何要进行节点的复制呢?WHY? WHY? WHY?

WHY?

因为我们须用节点spritenode.copy()把其它Scene(CircleScene.sks)里的节点拷贝一份,并把拷贝的这一份节点加到当前的scene(GameScene.sks)里,还有一个重要的注意点,就是如果要在GameScene.sks取得 Overlay内的红色节点的准确坐标,须用convert把copy到fgNode的节点上的红色节点坐标转为GameScene的坐标(<code>let pos = fgNode.convert(sprite.position, from: sprite.parent!)</code>),好像有点儿深奥,其实不复杂的,具体查看以下代码;

节点copy及坐标转换
//取得CircelScene.sks上的Overlay节点
var circleAcross: SKSpriteNode!
let overlayScene = SKScene(fileNamed: "CircelScene.sks")!
let overlayNode = overlayScene.childNode(withName: "Overlay")
circleAcross = overlayNode
//复制一份节点的拷贝,并加在fgNode节点上
let initialPlatform = circleAcross.copy() as! SKSpriteNode
fgNode.addChild(initialPlatform)
//取得CircelScene.sks上内的Overlay节点的子节点名称为 "red"的所有节点

animateCoinsInOverlay(overlayNode)

func animateCoinsInOverlay(_ overlay: SKSpriteNode) {
overlay.enumerateChildNodes(withName: "*", using: { (node, stop) in
if node.name == "red" {
node.run(SKAction.repeatForever(self.coinSpecialAnimation))
} else {
node.run(SKAction.repeatForever(self.coinAnimation))
}
})
}
//节点发生碰撞时 didBegin(:)添加节点的特效,须用convert把子节点坐标coordinate转到fgNode的坐标上

func emitParticles(name: String, sprite: SKSpriteNode) {
// name 发生碰撞的特效名称;
// sprite 发生碰撞的的节点 ,如"red"圆形节点;
// sprite.parent 为overlay
// fgNode.convert 把coin在cicleScene.sks的坐标转为fgNode上的坐标 let pos = fgNode.convert(sprite.position, from: sprite.parent!)
let particles = SKEmitterNode(fileNamed: name)!
particles.position = pos
particles.zPosition = 3
fgNode.addChild(particles)
}

更多游戏教学:http://www.iFIERO.com

SpirteKit深度复制SKSpriteNode节点及convert转换其它Scene上的节点到当前场景坐标的更多相关文章

  1. [源码解析] 深度学习流水线并行 PipeDream(3)--- 转换模型

    [源码解析] 深度学习流水线并行 PipeDream(3)--- 转换模型 目录 [源码解析] 深度学习流水线并行 PipeDream(3)--- 转换模型 0x00 摘要 0x01 前言 1.1 改 ...

  2. 深入探讨JavaScript如何实现深度复制(deep clone)

    在代码复用模式里面有一种叫做“复制属性模式”(copying properties pattern).谈到代码复用的时候,很有可能想到的是代码的继承性(inheritance),但重要的是要记住其最终 ...

  3. 使用结构化克隆在 JavaScript 中进行深度复制

    在很长一段时间内,您不得不求助于变通方法和库来创建 JavaScript 值的深层副本.现在js提供 「structuredClone()」 一个用于深度复制的内置函数. 浏览器支持: 浅拷贝 在 J ...

  4. 【Java EE 学习 72 下】【数据采集系统第四天】【移动/复制页分析】【使用串行化技术实现深度复制】

    一.移动.复制页的逻辑实现 移动.复制页的功能是在设计调查页面的时候需要实现的功能.规则是如果在同一个调查中的话就是移动,如果是在不同调查中的就是复制. 无论是移动还是复制,都需要注意一个问题,那就是 ...

  5. js对象/数组深度复制

    今天碰到个问题,js对象.数组深度复制:之前有见过类似的,不过没有实现函数复制,今晚想了一下,实现代码如下: function clone(obj) { var a; if(obj instanceo ...

  6. javascript 数组的深度复制

    javascript 数组的深度复制 一般情况下,使用 "=" 可以实现赋值.但对于数组.对象.函数等这些引用类型的数据,这个符号就不好使了. 1. 数组的简单复制 1.1 简单遍 ...

  7. 转载---Java集合对象的深度复制与普通复制

    原博文:http://blog.csdn.net/qq_29329775/article/details/49516247 最近在做算法作业时出现了错误,原因是没有弄清楚java集合的深度复制和浅度复 ...

  8. .NET基础之深度复制和浅度复制

    之前一直没有搞清楚深度复制和浅度复制的区别到底在哪里,今天彻底把这个东西弄懂了,写出来与到家共勉. 如果大家不懂值类型和引用类型的区别,请先看http://www.cnblogs.com/Autumo ...

  9. 【Stack Overflow -- 原创加工、原创整理、生产实战】-- 深度复制

    一.说明 1.本程序的核心代码不是我原创的,是我在Stack Overflow上搜集后加工出来的,原作者已忘记了~ 2.这段程序是我在上海携程(2014年左右)上班时整理并在生产环境应用的,先后经历了 ...

随机推荐

  1. js图片跟随鼠标移动

    <div id="wrapper"><img src="http://images.cnblogs.com/cnblogs_com/rain-null/ ...

  2. 项目经验:GIS<MapWinGIS>建模第二天

    记录下GIS的进展情况

  3. Flex 加载dwg

    之前写的几种格式不是专门gis格式,这次来说说加载dwg.首先dwg格式不同于dxf格式,虽然autocad都能加载进去,真正用的比较多的是dwg格式,反正测绘,国土规划部门都是,吐槽下,然而auto ...

  4. Android 编辑框插入表情图片

    首先,把整理好的表情图片以及布局用到的一些图片导入到项目的res/drawable目录中. 然后,编辑res/layout目录下布局.xml文件,这里我把oschina客户端的布局代码贴上来,供大家参 ...

  5. IIS7 使用server farms 进行负载均衡

    1.首先,到微软官网下载web平台安装程序: https://www.microsoft.com/web/downloads/ 2.安装好后,会在IIS里有这个图标: 3.双击这个图标:安装 4.安装 ...

  6. 如何在 Azure 中的经典 Windows 虚拟机上设置终结点

    在 Azure 中使用经典部署模型创建的所有 Windows 虚拟机都可以通过专用网络通道与同一云服务或虚拟网络中的其他虚拟机自动通信. 但是,Internet 或其他虚拟网络中的计算机需要终结点将入 ...

  7. CentOS随笔 - 1.虚拟机VMware安装CentOS7系统

    前言 转帖请注明出处: http://www.cnblogs.com/Troy-Lv5/ 需要安装CentOS首先你得下载安装镜像文件(地址: https://www.centos.org/downl ...

  8. 关于cocostudio动态添加控件触摸响应无效的学习

    time:2015/04/19 1. 描述 * 把studio制作的ui加载之后,动态添加事件(比如说,单点触摸),结果回调函数(eg:onTouchBegan等)根本没有响应! * 另外,网上有朋友 ...

  9. 详解COM Add In的LoadBehavior及其妙用

     Office的所有COM Add In,包括用Shared Add In模板和VSTO Add In模板创建的,都会在注册表里面存储一些信息. 对于当前用户安装的Add In,以Excel为例,对应 ...

  10. Python学习---Django的新工程设置模板

    该模板完全可以在创建好新工程后进行部分代码替换 创建app01的  python startapp app01   创建static子目录 settings.py """ ...