Swift - 跳跃吃苹果游戏开发(SpriteKit游戏开发)
下面通过一个样例演示如何实现飞行道具的生成,以及道具碰撞拾取。
 
| 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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | importSpriteKitclassAppleFactory:SKNode{    //定义苹果纹理    letappleTexture = SKTexture(imageNamed: "apple")    //游戏场景的狂赌    varsceneWidth :CGFloat= 0.0    //定义苹果数组    vararrApple = [SKSpriteNode]()    //定时器    vartimer = NSTimer()        funconInit(width:CGFloat) {        self.sceneWidth = width        //启动的定时器        timer = NSTimer.scheduledTimerWithTimeInterval( 0.2, target: self,            selector: "createApple", userInfo: nil, repeats: true)    }        //创建苹果类    funccreateApple(){        //通过随机数来随机生成苹果        //算法是,随机生成0-9的数,当随机数大于8的时候声称苹果        //也就是说,有1/10的几率生成苹果        //这样游戏场景中的苹果就不会整整齐齐以相同间隔出现了        letrandom = arc4random() % 10        ifrandom > 8 {            //生成苹果            letapple = SKSpriteNode(texture: appleTexture)            //设置物理体            apple.physicsBody = SKPhysicsBody(rectangleOfSize: apple.size)            //弹性设为0            apple.physicsBody?.restitution = 0            //物理体标识            apple.physicsBody?.categoryBitMask = BitMaskType.apple            //不受物理效果影响            apple.physicsBody?.dynamic= false            //设置中心点            apple.anchorPoint = CGPointMake(0, 0)            //z轴深度            apple.zPosition = 40            //设定位置            lettheY = CGFloat(arc4random()%200 + 200)            apple.position  = CGPointMake(sceneWidth+apple.frame.width , theY)            //加入数组            arrApple.append(apple)            //加入场景            self.addChild(apple)        }    }        //苹果移动方法    funcmove(speed:CGFloat){        forapple inarrApple {            apple.position.x -= speed        }        //移出屏幕外时移除苹果        ifarrApple.count > 0 && arrApple[0].position.x < -20{            arrApple[0].removeFromParent()            arrApple.removeAtIndex(0)        }    }        //重置方法    funcreSet(){        //移除所有子对象        self.removeAllChildren()        //清空苹果数组        arrApple.removeAll(keepCapacity: false)    }} | 
| 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 | importSpriteKitclassPanda: SKSpriteNode{    //定义纹理    letpandaTexture = SKTexture(imageNamed: "panda")        init() {        //执行父类的构造方法        super.init(texture:pandaTexture,color:SKColor.whiteColor(),size:pandaTexture.size())        //设置中心点        self.anchorPoint = CGPointMake(0, 0)                self.physicsBody = SKPhysicsBody(rectangleOfSize:pandaTexture.size())        self.physicsBody?.dynamic= true        self.physicsBody?.allowsRotation = false                //弹性        self.physicsBody?.restitution = 0        self.physicsBody?.categoryBitMask = BitMaskType.panda        self.physicsBody?.contactTestBitMask = BitMaskType.scene|BitMaskType.apple        self.physicsBody?.collisionBitMask = BitMaskType.scene    }        requiredinit(coder aDecoder: NSCoder) {        fatalError("init(coder:) has not been implemented")    }        //跳    funcjump (){        //施加一个向上的力,让小人跳起来        self.physicsBody?.velocity = CGVectorMake(0, 700)    }} | 
| 1 2 3 4 5 6 7 8 9 10 11 | classBitMaskType{    classvarpanda:UInt32{        return1<<0    }    classvarapple:UInt32{        return1<<1    }     classvarscene:UInt32{        return1<<2    }} | 
| 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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | importSpriteKitclassGameScene: SKScene,SKPhysicsContactDelegate{    lazyvarappleFactory = AppleFactory()    lazyvarpanda = Panda()        //移动速度    varmoveSpeed:CGFloat= 15    //吃到的苹果数    varappleNum = 0        overridefuncdidMoveToView(view: SKView) {        //物理世界代理        self.physicsWorld.contactDelegate = self        //重力设置        self.physicsWorld.gravity = CGVectorMake(0, -5)        //设置物理体        self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)        //设置种类标示        self.physicsBody?.categoryBitMask = BitMaskType.scene        //是否响应物理效果        self.physicsBody?.dynamic= false                //场景的背景颜色        letskyColor = SKColor(red:113/255,green:197/255,blue:207/255,alpha:1)        self.backgroundColor = skyColor                //给小人定一个初始位置        panda.position = CGPointMake(200, 400)        //将小人显示在场景中        self.addChild(panda)                //苹果工厂        appleFactory.onInit(self.frame.width)        self.addChild( appleFactory )    }        overridefunctouchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {        panda.jump()    }       overridefuncupdate(currentTime: CFTimeInterval) {        appleFactory.move(moveSpeed)    }        //碰撞检测方法    funcdidBeginContact(contact: SKPhysicsContact) {        //熊猫和苹果碰撞        if(contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask)            == (BitMaskType.apple | BitMaskType.panda){                //苹果计数加1                self.appleNum++                //如果碰撞体A是苹果,隐藏碰撞体A,反之隐藏碰撞体B                //(因为苹果出了屏幕都会被移除,所以这里隐藏就可以了)                ifcontact.bodyA.categoryBitMask == BitMaskType.apple {                    contact.bodyA.node?.hidden = true                }else{                    contact.bodyB.node?.hidden = true                }        }    }} | 
源码下载: EatApple.zip
EatApple.zip
Swift - 跳跃吃苹果游戏开发(SpriteKit游戏开发)的更多相关文章
- Swift - 创建并设置背景(SpriteKit游戏开发)
		1,先把背景图片bg.jpg,bg@2x.jpg直接拖进Images.xcassets中 2,设置如下代码(背景图直接铺满整个屏幕) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ... 
- Swift - 一步步教你使用SpriteKit创建开发游戏项目
		一,什么是SpriteKit SpriteKit是苹果公司官方出品,用于制作2D游戏的框架.这个框架具备了图形渲染和动画的功能.可以使图像或者精灵(sprite)动 起来.SpriteKit的渲染方式 ... 
- iOS开发 Swift开发数独游戏(一)
		一.前言 我姥姥是一名退休数学老师,一直很喜欢玩数独游戏.我以前答应过她要给她写一个数独游戏.本来计划是写一个Android应用的,但恰好我学了好长时间iOS开发一直没做什么"大项目&quo ... 
- 一个人独立开发 3D 游戏引擎可能吗?
		作者:孙志超链接:https://www.zhihu.com/question/24733255/answer/42000966来源:知乎著作权归作者所有,转载请联系作者获得授权. 当然可以,但难道有 ... 
- IOS 2D游戏开发框架 SpriteKit
		最近发现Xcode自带的2D游戏开发框架SpriteKit可以直接引入到APP中进行混合开发,这就是说可以开发出既带业务应用又带游戏的苹果APP,咋怎么觉得这是一个自己的小发现....呵呵....., ... 
- UWP简单示例(三):快速开发2D游戏引擎
		准备 IDE:VisualStudio 2015 Language:VB.NET/C# 图形API:Win2D MSDN教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面 ... 
- 王者荣耀是怎样炼成的(一)《王者荣耀》用什么开发,游戏入门,unity3D介绍
		在国内,如果你没有听说过<王者荣耀>,那你一定是古董级的人物了. <王者荣耀>(以下简称“农药”),专注于移动端(Android.IOS)的MOBA游戏.笔者看到这么火爆,就萌 ... 
- 用Cocos2dx开发棋牌游戏的观点解析
		众所周知,目前棋牌游戏特别的火.很多游戏公司都想在这一块赚钱,可是却不知用什么软件比较好的去开发棋牌游戏,对此,我列出了两款比较靠谱的软件去开发棋牌游戏,希望对大家有帮助! 第一款软件是cocos2d ... 
- HTML5外包注意事项-开发HTML5游戏的九大坑与解决方法剖析
		随着移动社区兴起,势必带动HTML5的革命.未来一两年内,HTML5移动游戏必将呈现大爆发趋势. 以下是整理的HTML5游戏研发.市场趋势以及渠道布局和技术解决方案的内容.希望大家能从本文中找到对HT ... 
随机推荐
- [Swust OJ 1084]--Mzx0821月赛系列之情书(双线程dp)
			题目链接:http://acm.swust.edu.cn/problem/1084/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ... 
- 2014 HDU多校弟五场J题 【矩阵乘积】
			题意很简单,就是两个大矩阵相乘,然后求乘积. 用 Strassen算法 的话,当N的规模达到100左右就会StackOverFlow了 况且输入的数据范围可达到800,如果变量还不用全局变量的话连内存 ... 
- 笔记之Cyclone IV 第一卷第一章FPGA 器件系列概述
			因为本人用的黑金四代开发板,中央芯片采用ALTERA的cycloneIV E,所以就此器件阅读altera官网资料,并做相应的笔记,以便于以后查阅 Cyclone IV 器件系列具有以下特性:■ 低成 ... 
- Week10(11月11日):一个激动的日子
			Part I:提问 =========================== 请回答视图和控制器传递数据的方法. Part II:案例学习 =========================== Mu ... 
- UIScrollView方法 属性详解
			--前言:UIScrollView使用非常广,本文研究UIScrollView各属性和方法,明白它们的意义.作用.在后面的一篇文章有整理UIScrollView一些常见用法以及一些效果的实现思路. - ... 
- 设计模式(八)装饰器模式Decorator(结构型)
			设计模式(八)装饰器模式Decorator(结构型) 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法 ... 
- 快的打车 技术部 在 杭州 招聘 #年前面试 年后入职#架构师 - 内推网(neitui.me)
			快的打车 技术部 在 杭州 招聘 #年前面试 年后入职#架构师 - 内推网(neitui.me) 陈丹 (cd**@kuaidadi.com) 01-18 发布了内推 #年前面试 年后入职#架构师 • ... 
- java--内部类访问final成员
			局部类只能访问外包方法中的final成员.位于方法内部的局部类,可以访问局部类之外,外包方法之内的所以变量和方法,但是生命周期不同,延长生命周期的办法就是将变量设置为final类型. 1)从程序设计语 ... 
- jQuery格式化时间插件formatDate
			一.不传时间 $.formatDate("yyyy-MM-dd HH:mm:ss"); 二.传时间 $.formatDate("yyyy-MM-dd HH:mm:ss ... 
- docker学习笔记6:利用dockerfile创建镜像介绍(生成简单web服务器镜像)
			本文介绍如何利用dockerfile来创建镜像.下面介绍具体的操作过程: 一.创建构建环境 操作示例如下: xxx@ubuntu:~$ pwd /home/xxx xxx@ubuntu:~$ mkdi ... 
