IOS 2D游戏开发框架 SpriteKit--续(创建敌对精灵)
这次包括之后讲的spritekit 我都会围绕一个案例来说,这个案例就是一个简单的2d飞机大战游戏,今天这里我讲创建敌对精灵,就是敌对飞机,敌对飞机不停的被刷新到屏幕上.....当然这里涉及到的类其实还是,精灵,和材质两个类,这两个类前两篇的案例中已经出现过,使用方法都一样,主要看逻辑,我这里主要是实现每间隔一段时间屏幕就刷新一个敌对飞机。飞机从屏幕高度为起点往下移动,当potion移动到0时将敌对飞机移出。
1 /*这个方法是spritekit 的场景自带的,每过一秒就会被调用*/ 2 -(void)update:(CFTimeInterval)currentTime { 3 [self BackMove:1]; 4 5 [self initEnemySprite];//本次增加的创建敌对飞机的方法 6 7 8 } 9 /*创建敌对飞机*/ 10 -(void)initEnemySprite 11 { 12 /*此方法是放在update里面的所以是每秒执行一次,下面三个变量就是控制飞机刷新速度的,如果不控制,屏幕就会每秒都刷新一个飞机出来,那么不一会屏幕就会爆满, 这里每35秒刷新一架小型地址每400秒刷新一架中型飞机, 每700秒刷行一架大飞机*/ 13 _smallPlaneTime++; 14 _mediumPlaneTime++; 15 _bigPlaneTime++; 16 17 18 //int RadomNumber= (arc4random() % 100) + 0; 19 int SpriteX=DEVICE_Width; 20 /*随机精灵在x轴的位置*/ 21 int x = (arc4random() % (SpriteX-90)) + 45; 22 23 int speed = 0; 24 25 26 if (_smallPlaneTime>35) { 27 UIImage *farTextureImageThree=[UIImage imageNamed:@"MemberTwo"]; 28 SKTexture *farTextureThree = [SKTexture textureWithImage:farTextureImageThree]; 29 30 31 SKSpriteNode *foePlane = [SKSpriteNode spriteNodeWithTexture: farTextureThree size:CGSizeMake(farTextureThree.size.width/2.5, farTextureThree.size.height/2.5)]; 32 //增加敌对飞机受动力感应的范围 33 foePlane.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:foePlane.size]; 34 /*飞机向下移动速度*/ 35 speed= (arc4random() % 5) + 2; 36 37 foePlane.position = CGPointMake(x, self.size.height); 38 foePlane.zPosition=1; 39 /*下面三个属性是设置敌对飞机的重力检测属性,之后它们都会用到,比如之后用户操作的飞机发射子弹打在它们上面,下面这属性就起作用了*/ 40 foePlane.physicsBody.categoryBitMask = SKRoleCategoryFoePlane; 41 foePlane.physicsBody.collisionBitMask = SKRoleCategoryBullet; 42 foePlane.physicsBody.contactTestBitMask = SKRoleCategoryBullet; 43 [self addChild:foePlane]; 44 /*当精灵的y坐标为0时将精灵从父节点移出*/ 45 [foePlane runAction:[SKAction sequence:@[[SKAction moveToY:0 duration:speed],[SKAction removeFromParent]]] completion:^{ 46 [foePlane removeFromParent]; 47 }]; 48 _smallPlaneTime=0; 49 50 } 51 52 if (_mediumPlaneTime>400) { 53 54 55 56 UIImage *farTextureImageThree=[UIImage imageNamed:@"Teamer"]; 57 SKTexture *farTextureThree = [SKTexture textureWithImage:farTextureImageThree]; 58 SKSpriteNode *foePlane = [SKSpriteNode spriteNodeWithTexture: farTextureThree size:CGSizeMake(farTextureThree.size.width/2.5, farTextureThree.size.height/2.5)]; 59 //增加敌对飞机受动力感应的范围 60 foePlane.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:foePlane.size]; 61 /*飞机向下移动速度*/ 62 speed = (arc4random() % 2) + 2; 63 64 foePlane.position = CGPointMake(x, self.size.height); 65 66 foePlane.zPosition=1; 67 /*下面三个属性是设置敌对飞机的重力检测属性,之后它们都会用到,比如之后用户操作的飞机发射子弹打在它们上面,下面这属性就起作用了*/ 68 foePlane.physicsBody.categoryBitMask = SKRoleCategoryFoePlane; 69 foePlane.physicsBody.collisionBitMask = SKRoleCategoryBullet; 70 foePlane.physicsBody.contactTestBitMask = SKRoleCategoryBullet; 71 [self addChild:foePlane]; 72 /*当精灵的y坐标为0时将精灵从父节点移出*/ 73 [foePlane runAction:[SKAction sequence:@[[SKAction moveToY:0 duration:speed],[SKAction removeFromParent]]] completion:^{ 74 [foePlane removeFromParent]; 75 }]; 76 _mediumPlaneTime=0; 77 78 } 79 80 81 if (_bigPlaneTime>700) { 82 83 84 85 86 87 88 UIImage *farTextureImageThree=[UIImage imageNamed:@"Unknown"]; 89 SKTexture *farTextureThree = [SKTexture textureWithImage:farTextureImageThree]; 90 91 92 SKSpriteNode *foePlane = [SKSpriteNode spriteNodeWithTexture: farTextureThree size:CGSizeMake(farTextureThree.size.width/2.5, farTextureThree.size.height/2.5)]; 93 94 95 //增加敌对飞机受动力感应的范围 96 foePlane.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:foePlane.size]; 97 98 /*飞机向下移动速度*/ 99 speed = (arc4random() % 5) + 3; 100 foePlane.position = CGPointMake(x, self.size.height); 101 foePlane.zPosition=1; 102 /*下面三个属性是设置敌对飞机的重力检测属性,之后它们都会用到,比如之后用户操作的飞机发射子弹打在它们上面,下面这属性就起作用了*/ 103 foePlane.physicsBody.categoryBitMask = SKRoleCategoryFoePlane; 104 foePlane.physicsBody.collisionBitMask = SKRoleCategoryBullet; 105 foePlane.physicsBody.contactTestBitMask = SKRoleCategoryBullet; 106 [self addChild:foePlane]; 107 /*当精灵的y坐标为0时将精灵从父节点移出*/ 108 [foePlane runAction:[SKAction sequence:@[[SKAction moveToY:5 duration:speed],[SKAction removeFromParent]]] completion:^{ 109 [foePlane removeFromParent]; 110 }]; 111 _bigPlaneTime=0; 112 113 } 114 115 116 117 118 119 }
其实这里的精灵和材质类我都是封装了类的,这里为了显示代码,所以直接把封装类的代码写一起了。开发时不建议这样做。
下面是下载地址:http://download.csdn.net/detail/qq_35826634/9599204 有兴趣的朋友可以去下来看看
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。
转载于:https://www.cnblogs.com/xiaoliao/p/5754064.html
IOS 2D游戏开发框架 SpriteKit--续(创建敌对精灵)相关推荐
- IOS 2D游戏开发框架 SpriteKit--续(postion,锚点,游戏滚动场景)
一. Postion 这里的postion和app开发中的layer.postion是一样的,postion的值代表该视图在父节点中的相对位置, 比如一个试图的父节点是self.view, 这里我们想 ...
- Unity3d Platformer Pro 2D游戏开发框架使用教程
前言 Platformer Pro框架是Unity3d AssetStore上一个非常强大和受欢迎的2d游戏开发框架,这个教程的大部分翻译于官方文档,一部分是工作总结,还有一部分是视频教程文档化.这个 ...
- 【Rust日报】2023-01-07 shura-一个安全的2D 游戏引擎,易于创建易于管理的游戏
shura-一个安全的2D 游戏引擎,易于创建易于管理的游戏 shura是rust编写的一个安全,快速并且跨平台的游戏框架.shura使用一个2D组件系统.场景管理和group系统帮你管理一个大型游戏 ...
- Flutter教程之使用 Flutter Flame 快速轻松地创建 2D 游戏(教程含源码)
Flutter 使您能够从单个代码库开发适用于 Android.iOS.桌面和 Web 等平台的应用程序.作为一个多平台的 UI 工具包,Flutter 团队致力于让各类开发者能够快速构建和发布应用. ...
- OpenGL学习笔记一之实战篇五 2D游戏(Breakout)之渲染精灵
转载自 https://learnopengl-cn.github.io/06%20In%20Practice/2D-Game/03%20Rendering%20Sprites/ 本节暂未进行完全的重 ...
- 【中英双语】Unity:从零开始构建2D游戏
[中英双语]Unity:从零开始构建2D游戏 通过制作 Unity 2D 游戏来学习 C# 编码 此教程共14.0小时,中英双语字幕,画质清晰无水印,源码附件全 课程英文名:Building 2D G ...
- iOS游戏开发之使用 Spritekit 框架和 Swift 的 iOS 2D 太空射击游戏(教程含源码)
实战需求 使用 Spritekit 框架和 Swift 的 iOS 2D 太空射击游戏 本文价值与收获 看完本文后,您将能够作出下面的界面 实战代码 1.主界面 import SpriteKit im ...
- iOS开发实战-基于SpriteKit的FlappyBird小游戏
写在前面 最近一直在忙自己的维P恩的事情 公司项目也是一团乱 于是...随手找了个游戏项目改了改就上线了,就当充数了. SpriteKit简介 SpriteKit是iOS 7之后苹果推出的2D游戏框架 ...
- spritekit 动画_iOS 2D游戏引擎框架SpriteKit入门
最近用闲暇时间了解了下iOS 7.0 SDK就提供的一个2D游戏引擎框架SpriteKit,用此实现了一个之前比较流行的游戏"保卫萝卜"中的一个小场景,毕竟有具体需求的实践能提高学 ...
最新文章
- OpenCL编程详细解析与实例
- Spark集群启动时worker节点启不起来
- java list 结构_Java中常见数据结构List之ArrayList
- INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES错误解决方法
- postDelayed总结
- 查看电脑python虚拟环境-Linux系统创建python虚拟环境
- buuoj-crypto 1
- 干货丨你知道Python中a += b和a = a + b的结果是不一样的吗?
- 程序员特有的9个坏习惯
- goahead如何使用cgi服务_QQ如何设置使用代理服务器?
- 高级软件工程课程第一次作业的小结
- 工作79:获取对应中文
- Golang程序性能分析(二)在Echo和Gin框架中使用pprof
- 递增运算符练习(JS)
- springboot的if else过多解决方案
- 华为手机linux驱动下载,华为手机驱动官方版
- PdgCntEditor系列教程一:基础知识
- 微信小程序展示弹窗的方式
- vue 对象提供的属性功能、通过axio请求数据(2)
- PM血泪总结项目管理中存在的教训
热门文章
- 大端和小端的判断及转换
- 【C语言】C语言实现面向对象编程之封装
- 【Linux】一步一步学Linux——iptables-restore命令(188)
- 【STM32】 keil软件工具--configuration详解(下)
- [Qt教程] 第47篇 进阶(七) 定制Qt帮助系统
- 计算机辅助药物设计局限,计算机辅助药物设计高效低耗
- springboot集成swagger2,以及swagger-ui.html访问404的问题解决:拦截器造成的
- pixhawk的姿态控制算法解读
- c语言函数汉诺塔不用move,C语言——汉诺塔问题(函数递归)
- 记录 之 不同的Normalization方式