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
|
import SpriteKit class AppleFactory : SKNode { //定义苹果纹理 let appleTexture = SKTexture (imageNamed: "apple" ) //游戏场景的狂赌 var sceneWidth : CGFloat = 0.0 //定义苹果数组 var arrApple = [ SKSpriteNode ]() //定时器 var timer = NSTimer () func onInit(width: CGFloat ) { self .sceneWidth = width //启动的定时器 timer = NSTimer .scheduledTimerWithTimeInterval( 0.2, target: self , selector: "createApple" , userInfo: nil , repeats: true ) } //创建苹果类 func createApple(){ //通过随机数来随机生成苹果 //算法是,随机生成0-9的数,当随机数大于8的时候声称苹果 //也就是说,有1/10的几率生成苹果 //这样游戏场景中的苹果就不会整整齐齐以相同间隔出现了 let random = arc4random() % 10 if random > 8 { //生成苹果 let apple = 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 //设定位置 let theY = CGFloat (arc4random()%200 + 200) apple.position = CGPointMake (sceneWidth+apple.frame.width , theY) //加入数组 arrApple.append(apple) //加入场景 self .addChild(apple) } } //苹果移动方法 func move(speed: CGFloat ){ for apple in arrApple { apple.position.x -= speed } //移出屏幕外时移除苹果 if arrApple.count > 0 && arrApple[0].position.x < -20{ arrApple[0].removeFromParent() arrApple.removeAtIndex(0) } } //重置方法 func reSet(){ //移除所有子对象 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
|
import SpriteKit class Panda : SKSpriteNode { //定义纹理 let pandaTexture = 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 } required init (coder aDecoder: NSCoder ) { fatalError( "init(coder:) has not been implemented" ) } //跳 func jump (){ //施加一个向上的力,让小人跳起来 self .physicsBody?.velocity = CGVectorMake (0, 700) } } |
1
2
3
4
5
6
7
8
9
10
11
|
class BitMaskType { class var panda: UInt32 { return 1<<0 } class var apple: UInt32 { return 1<<1 } class var scene: UInt32 { return 1<<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
|
import SpriteKit class GameScene : SKScene , SKPhysicsContactDelegate { lazy var appleFactory = AppleFactory () lazy var panda = Panda () //移动速度 var moveSpeed: CGFloat = 15 //吃到的苹果数 var appleNum = 0 override func didMoveToView(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 //场景的背景颜色 let skyColor = 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 ) } override func touchesBegan(touches: Set < UITouch >, withEvent event: UIEvent ?) { panda.jump() } override func update(currentTime: CFTimeInterval ) { appleFactory.move(moveSpeed) } //碰撞检测方法 func didBeginContact(contact: SKPhysicsContact ) { //熊猫和苹果碰撞 if (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask) == ( BitMaskType .apple | BitMaskType .panda){ //苹果计数加1 self .appleNum++ //如果碰撞体A是苹果,隐藏碰撞体A,反之隐藏碰撞体B //(因为苹果出了屏幕都会被移除,所以这里隐藏就可以了) if contact.bodyA.categoryBitMask == BitMaskType .apple { contact.bodyA.node?.hidden = true } else { contact.bodyB.node?.hidden = true } } } } |
源码下载: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 ...
随机推荐
- c++,基类声明的指针变量和引用类型变量可以指向派 生类的对象
基类声明的指针变量和引用类型变量可以指向派生类的对象,而反过来派生类的指针却不能指向基类变量. 这与基类和派生类之间,被允许的赋值方向是相反的. 但是从逻辑上很容易推敲其合理性.
- Irrlicht学习之光照的研究
Irrlicht学习之光照的研究 最近研究一下Irrlicht的光照.发现Irrlicht的光照还是比较简单的,相比低于它的OpenGL和Direct3D,设置光源以及设置光照的参数更加人性化(可能是 ...
- Python框架 Flask 项目实战教程
本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走.下载源码,运行pip install -r requirements.txt 建立环境python db_ ...
- Week1(9月12日):很激动的第一次课
Part I:课程介绍 =========================== 1. 学时 8*16=128 2. 时间 周二1234,周五1234 3. 地点 E307 4. 考试方式 笔试+上机 ...
- Net Core在Linux环境
Net Core在Linux环境 基础环境和相关软件准备 1.CentOS7.1 64位系统(或者其他CentOS版本的64位系统) 2.WinSCP软件(主要是方便管理和编辑Linux系统的文件) ...
- Python 2.7 学习笔记 访问mysql数据库
一.基本概念 使用python操作数据库,其基本的流程如下(其实所有开发语言访问数据库的流程都是这样). 1.第一,引入相应数据库的python数据库接口模块,针对不同的数据库类型,有不同的数据库访问 ...
- docker 学习笔记21:docker连接网络的设置
1.如果docker主机不需要通过代理连接外网 则docker的相关命令(如docker search)或docker容器与网络相关的操作都可以正常进行,不需要特殊设置. 2.当docker主机 是通 ...
- signal()函数说明
表头文件#include<signal.h> 功 能:设置某一信号的对应动作 函数原型:void (*signal(int signum,void(* handler)(int)))(in ...
- 富文本编辑器 - wangEditor 上传图片
效果: . 项目结构图: wangEditor-upload-img.html代码: <html> <head> <title>wangEditor-图片上传< ...
- Ibatis调用存储过程实现增删改以及分页查询
1.Ibatis实现增删改操作很简单了,通常我是将某一模块的增删改功能写在一个存储过程里,通过一个标识符去区分执行增加还是修改抑或删除操作. statement: <!-- 存储过程:实现学生的 ...