SpriteKit小球被旋涡吞噬动画的进一步改进

App首先找到map文件,然后将场景地图载入游戏。map是一个人可读的ASCII字符文件,每个单元是一个“瓦块”,在cocos2d中对瓦块地图有非常好的的支持,不过在SpriteKit中,至少目前为止瓦块地图功能还不是那么太丰富。

不管怎样把,地图中游戏元素分为star,旋涡和终点几种。当player碰到终点则游戏过关;如果碰到star则player得分;若是player不幸碰到了旋涡,对不起GAME OVER!

这时哪能没有酷炫的动画呢?我们制作一个player被吸入旋涡,并且不断旋转被侵蚀的动画吧。

游戏原来的动画代码如下:

func playerCollidedWith(node:SKNode){
       if node.name == "vortex"{
           player.physicsBody!.isDynamic = false
           player.physicsBody!.allowsRotation = true
           gameOver = true
           score -= 1

           let move = SKAction.move(to: node.position, duration: 0.25)
           let scale = SKAction.scale(to: 0.0001, duration: 0.25)
           let remove = SKAction.removeFromParent()
           let seq = SKAction.sequence([move,scale,remove])

           player.run(seq) {[unowned self] in
               self.createPlayer()
               self.gameOver = false
           }
       }else if node.name == "star"{
           node.removeFromParent()
           score += 1
       }else if node.name == "finish"{
           //???
       }
   }

但这样有一个问题:当玩家挂掉游戏重新开始后,player还是受上一次的重力影响,这可不太妙啊。我们来重构一下!首先将didMove中初始化重力的代码放到一个新方法中:

func initGame(){
        physicsWorld.gravity = CGVector(dx: 0, dy: 0)
}

然后在player.run的结束闭包中调用:

player.run(seq) {[unowned self] in
    initGame()
    self.createPlayer()
    self.gameOver = false
}

OK!下面把主要注意了集中到小球旋转进入旋涡的动画上来,注意一开始我“一不小心”写了一个错误的代码:


let rotate = SKAction.rotate(byAngle: CGFloat(Double.pi), duration: 0.25)
let forever = SKAction.repeatForever(rotate)

let grp = SKAction.group([scale,forever])
let remove = SKAction.removeFromParent()
let seq = SKAction.sequence([move,grp,remove])

player.run(seq) {[unowned self] in
    //do org stuff...
}

各位有没有看出错误在哪里?

对了!就是我在grp一个包装中用了永远重复动作,如果这样的话你后面的run闭包永远不会被执行,因为你的动画永远不会停止啊!

所以下面是稍加修改后的代码:

let move = SKAction.move(to: node.position, duration: 0.25)
let scale = SKAction.scale(to: 0.0001, duration: 1.0)
let rotate = SKAction.rotate(byAngle: CGFloat(Double.pi), duration: 0.25)
let actRepeat = SKAction.repeat(rotate, count: 4)
let grp = SKAction.group([scale,actRepeat])
let remove = SKAction.removeFromParent()
let seq = SKAction.sequence([move,grp,remove])

player.run(seq) {[unowned self] in
   //do org staff...
}

注意我将缩放动作时间延长到1秒,而旋转动画时间是0.25秒,这样重复四次正好1秒,从而组成一个动画组!

运行App效果如下:

比原来的动画生动了不少,各位觉得呢? ;)

时间: 2024-10-11 20:24:22

SpriteKit小球被旋涡吞噬动画的进一步改进的相关文章

08.spritekit征程——场景中的动画

08.spritekit征程--场景中的动画 接着上文,显示静态的文字是否无法满足你的欲望,那么本文的内容绝对让你热血沸腾,记得小时候爱看动画,现在有这么一个机会让你来创作是不是想想都有点小激动呢. 动画的核心呢就是actions.在Sprite Kit 中的大多数action 其实就是改变节点(Node)的属性罢了.假如你还不了解节点是什么,建议好好谷歌百度下,虽说都是最基础的知识,但是我认为"万丈大楼平地起",打好基础很是关键,另外就是坚持. 关于节点: 节点是最简单也是最难理解的

vue.js加入购物车小球动画

http://www.cnblogs.com/yuxingyoucan/p/7063881.html 生成一个动画小球的div,并且生成五个小球,五个是为了生成一定数量的小球来作为操作使用,按照小球动画的速度,一般来说五个也可以保证有足够的小球数量来运行动画 动画的内容分别是外层和内层,外层控制动画小球的轨道和方向,内层控制动画小球的运行状态 动画使用vue的js钩子实现 因为小球动画只有一个方向(只执行单方向从上到下滚落),所以只用了before-enter,enter,after-enter

如何用纯 CSS 创作一个小球上台阶的动画

效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/PBGJwL 可交互视频 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码. 请用 chrome, safari, edge 打开观看. https://scrimba.com/p/pEgDAM/cDMyyHv 源代码下载 本地下载 每日前端实战系列的全部源代码请从 github 下载: https://github.com/

iOS 学习完整项目,优秀的动画例子收藏 3

Hi all:准时奉上一周的iOS精华内容了,事半功倍的效果是不是棒棒哒?还有还有,还有童鞋在愁金钱不够如何下载想要的代码吗?快来看攻略吧~http://www.code4app.com/thread-7591-1-1.html<ignore_js_op> [一周精品源码] [iOS精品源码] 开源项目——『看知乎』iOS 版http://www.code4app.com/forum.php?mod=viewthread&tid=8316&extra=page%3D1%26fi

CSS3、SVG、Canvas、WebGL动画精选整理

一.CSS3动画 名称 用途 链接 阴影波纹特效 1.元素hover效果 2.突出表现效果 http://www.jq22.com/code80 横板导航菜单动画 导航菜单 http://www.jq22.com/code181 横板导航菜单动画2 导航菜单 http://www.jq22.com/code195 竖板导航菜单动画 导航菜单 http://www.jq22.com/code480 圆形导航菜单动画 导航菜单 http://www.jq22.com/code816 环形导航菜单动画

android 动画详解(二)

下面就开始学习属性动画的基本用法,我们来看属性动画的继承关系,如下如所示: 显然关注的焦点应该是ValueAnimator,ObjectAnimator这两个类啦,ObjectAnimator继承自ValueAnimator,是属性动画中非常重要的一个实现类,通过ObjectAnimator类的静态欧工厂方法来创建ObjectAnimator对象,这些静态工厂方法包括:ObjectAnimator.ofFloat(),ObjectAnimator.ofInt()等等,当然最为重要的一个静态工厂方

iOS 开发之动画篇 - 从 UIView 动画说起

毋庸置疑的:在iOS开发中,制作动画效果是最让开发者享受的环节之一.一个设计严谨.精细的动画效果能给用户耳目一新的效果,吸引他们的眼光 -- 这对于app而言是非常重要的. 本文作为动画文集的第一篇,最开始是想做个qq下拉刷新的水滴动画的制作讲解,但这几天研读<iOS Animations by Tutorials>一书,对iOS动画开发有了更为深刻的了解,于是决定动画篇将从UIView动画开始讲起,以后还会有Layer.Transitioning等在内的动画,希望本文能抛砖引玉,带给大家不一

11.spritekit征程——结尾篇之节点的狂欢

11.spriteKit征程--结尾篇之节点的狂欢 本文是sprite kit征程的结尾篇,当然这仅仅还只是开始.另外我已经完成一款sprite Kit的教学软件.希望多多支持. 小节目录: 01.关于sprite_kit 02.SpriteKit前瞻之视图场景 03.sprite_kit前瞻之节点树 04.sprite_kit前瞻之纹理 05.sprite_kit前瞻之节点的动画 06.sprite_kit前瞻之创造"真实"的世界 07.spritekit征程--创建第一个场景 08

A Simple Game —— ChainReaction

真的越来越喜欢web前端了. 本来一直觉得 游戏开发是个很高深的话题,虽然之前也会写点动态的网页,运动的对象,跳动的小球之类的简单动画,直到我遇到了JavaScript,jquery库.其实,最开始学习 JavaScript,感觉这是一门杂乱无章的弱语言,没有 C 和 C++ 或者 Java 那样有条理,可是,越是深入了解JavaScript,越会喜欢她的"自由豪放".尤其是 HTML5 的出现改变了我对的看法.到了html5的时代,各种犀利的设计就更明显的需要 JavaScript了