IOS 2D游戏开发框架 SpriteKit--续(postion,锚点,游戏滚动场景)
一、 Postion
这里的postion和app开发中的layer.postion是一样的,postion的值代表该视图在父节点中的相对位置, 比如一个试图的父节点是self.view, 这里我们想让这个试图在self.view中居中显示,那么layer.postion=CGPointMake(self.view.frame.size.widht/2,self.view.frame.size.height/2)...坐标就是标准的二维坐标系,x减少,位置像左移,x增加像右移, y增加像上移,y减少像下移,中心点是坐标原点。app开发中这个属性一般在使用动画时才会使用到。
一、 锚点
锚点的取值范围是(0,0.5,1)试图的默认锚点是:(0.5,0.5),锚点我把它理解为试图在一个范围内重复执行一个相同动作行为的支撑点,下面我截图说东西。
这里就是一个视图上可以取的锚点值,本来想传一个录制的视频,形象的说明下这东西,但是tmd发现不能传视频,来个详细地址,要深入理解自己去看。
http://jingyan.baidu.com/album/9f63fb918fa9ddc8400f0ec5.html?picindex=4
三、滚动场景背景图
关于实现滚动场景的背景图滚动的方法很多,这里只是我自己的方式,你也许会有更好的,首先滚动的背景图要想无缝连接上,那必须要美工把图做好了,这里我是用的三个精灵节点作为背景,当每个精灵节点的postion y超出顶部屏幕时,就将最后增加的那个背景节点的postion赋值给它,下面贴代码。
1 #import "GameScene.h" 2 @implementation GameScene 3 4 { 5 //场景背景节点精灵存放数组 6 NSMutableArray *NearbyArray; 7 8 } 9 10 /*初始化场景的方法,在uiviwecontroller 初始化场景时调用的方法*/ 11 - (instancetype)initWithSize:(CGSize)size 12 { 13 if (self = [super initWithSize:size]) { 14 15 NearbyArray=[[NSMutableArray alloc]init]; 16 /*第一个场景背景节点*/ 17 UIImage *farTextureImage=[UIImage imageNamed:@"planeBack"]; 18 SKTexture *farTexture = [SKTexture textureWithImage:farTextureImage]; 19 20 SKSpriteNode *farTextureSpriteOne = [SKSpriteNode spriteNodeWithTexture:farTexture size:self.size]; 21 // farTextureSpriteOne.anchorPoint=CGPointMake(DEVICE_Width/2, DEVICE_Height/2); 22 farTextureSpriteOne.zPosition=0; 23 farTextureSpriteOne.position=CGPointMake(self.frame.size.width/2, self.frame.size.height/2 ); 24 25 26 27 28 /*第二个场景背景节点*/ 29 UIImage *farTextureImageTwo=[UIImage imageNamed:@"planeBack"]; 30 SKTexture *farTextureTwo = [SKTexture textureWithImage:farTextureImageTwo]; 31 SKSpriteNode *farTextureSpriteTwo = [SKSpriteNode spriteNodeWithTexture:farTextureTwo size:self.size]; 32 //farTextureSpriteTwo.anchorPoint=CGPointMake(0, 0); 33 farTextureSpriteTwo.zPosition=0; 34 farTextureSpriteTwo.position=CGPointMake(farTextureSpriteOne.position.x, -(self.frame.size.height/2-10)); 35 36 37 38 /*第三个场景背景节点*/ 39 UIImage *farTextureImageThree=[UIImage imageNamed:@"planeBack"]; 40 SKTexture *farTextureThree = [SKTexture textureWithImage:farTextureImageThree]; 41 42 SKSpriteNode *farTextureSpriteThree =[SKSpriteNode spriteNodeWithTexture:farTextureThree size:self.size]; 43 44 farTextureSpriteThree.zPosition=0; 45 farTextureSpriteThree.position=CGPointMake(farTextureSpriteOne.position.x, -(self.frame.size.height/2+self.frame.size.height-20)); 46 47 48 49 50 [self addChild:farTextureSpriteOne]; 51 [self addChild:farTextureSpriteTwo]; 52 [self addChild:farTextureSpriteThree]; 53 54 /*把三个场景背景节点加到一个数组中去,等会滚动之后,才好快速获取每个节点,重置postion*/ 55 [NearbyArray addObject:farTextureSpriteOne]; 56 [NearbyArray addObject:farTextureSpriteTwo]; 57 [NearbyArray addObject:farTextureSpriteThree]; 58 59 60 } 61 return self; 62 63 } 64 65 /*设置背景图片滚动的方法*/ 66 -(void)BackMove:(CGFloat)moveSpeed 67 { 68 69 for (int i=0; i<NearbyArray.count; i++) { 70 SKSpriteNode *TempSprite=[NearbyArray objectAtIndex:i]; 71 72 73 [TempSprite setPosition:CGPointMake(TempSprite.position.x,TempSprite.position.y+moveSpeed)]; 74 } 75 76 //循环滚动算法 77 SKSpriteNode *RollOneSprite=[NearbyArray objectAtIndex:0]; 78 SKSpriteNode *RollTwoSprite=[NearbyArray objectAtIndex:1]; 79 SKSpriteNode *ThreeBackSprit=[NearbyArray objectAtIndex:2]; 80 81 if (RollOneSprite.position.y>(self.frame.size.height/2+self.frame.size.height)) 82 { 83 RollOneSprite.position=CGPointMake(RollOneSprite.position.x, -(self.frame.size.height/2+self.frame.size.height-30)); 84 85 } 86 if (RollTwoSprite.position.y>(self.frame.size.height/2+self.frame.size.height)) { 87 RollTwoSprite.position=CGPointMake(RollOneSprite.position.x, -(self.frame.size.height/2+self.frame.size.height-30)); 88 89 } 90 if (ThreeBackSprit.position.y>(self.frame.size.height/2+self.frame.size.height)) { 91 ThreeBackSprit.position=CGPointMake(RollOneSprite.position.x, -(self.frame.size.height/2+self.frame.size.height-30)); 92 93 } 94 } 95 96 /*这个方法是spritekit 的场景自带的,每过一秒就会被调用*/ 97 -(void)update:(CFTimeInterval)currentTime { 98 [self BackMove:2]; 99 100 101 } 102 103 @end
UIViewController调用
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 // Configure the view. 6 SKView * skView = (SKView *)self.view; 7 skView.showsFPS = YES; 8 skView.showsNodeCount = YES; 9 /* Sprite Kit applies additional optimizations to improve rendering performance */ 10 skView.ignoresSiblingOrder = YES; 11 12 13 GameScene *scene = [[GameScene alloc]initWithSize:skView.bounds.size]; 14 15 scene.scaleMode = SKSceneScaleModeAspectFill; 16 17 [skView presentScene:scene]; 18 19 }
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。
转载于:https://www.cnblogs.com/xiaoliao/p/5733602.html
IOS 2D游戏开发框架 SpriteKit--续(postion,锚点,游戏滚动场景)相关推荐
- libGDX跨平台游戏开发框架入门:开发一个小游戏之加载资源
目录 前言 加载资源 libGDX资源目录说明 配置各个平台启动器 desktop模块启动器设置 Android模块启动器设置 加速度计和指南针 html模块启动器设置 编写加载资产代码 1. 加载图 ...
- LibGDX_1.1: LibGDX 跨平台游戏开发框架简介
本文链接: http://blog.csdn.net/xietansheng/article/details/50185793 LibGDX 基础教程(总目录) 1. LibGDX简介 LibGDX ...
- iOS游戏开发之使用 Spritekit 框架和 Swift 的 iOS 2D 太空射击游戏(教程含源码)
实战需求 使用 Spritekit 框架和 Swift 的 iOS 2D 太空射击游戏 本文价值与收获 看完本文后,您将能够作出下面的界面 实战代码 1.主界面 import SpriteKit im ...
- iOS开发实战-基于SpriteKit的FlappyBird小游戏
写在前面 最近一直在忙自己的维P恩的事情 公司项目也是一团乱 于是...随手找了个游戏项目改了改就上线了,就当充数了. SpriteKit简介 SpriteKit是iOS 7之后苹果推出的2D游戏框架 ...
- 跨平台2D/3D游戏开发框架libGDX发布1.2.0更新
摘要:基于OpenGL (ES)的跨平台2D/3D游戏开发框架libGDX不仅开源免费,而且具有极为强大的兼容性和高效性,近日,libGDX发布全新1.2.0版本,除修复Bug之外,还新增了OpenG ...
- Unity3d Platformer Pro 2D游戏开发框架使用教程
前言 Platformer Pro框架是Unity3d AssetStore上一个非常强大和受欢迎的2d游戏开发框架,这个教程的大部分翻译于官方文档,一部分是工作总结,还有一部分是视频教程文档化.这个 ...
- android游戏开发框架libgdx环境搭建
原文链接: android游戏开发框架libgdx的使用(一)--环境搭建 Libgdx是一款支持2D与3D游戏开发的游戏类库,兼容大多数微机平台(标准JavaSE实现,能运行在Mac.Linux.W ...
- 14个非常棒的 JavaScript 游戏开发框架推荐
原文:14个非常棒的 JavaScript 游戏开发框架推荐 随着JavaScript结合HTML5开发越来越受欢迎,很多浏览器支持的新功能正被用户使用,与此同时,许多新的游戏正在使用JavaScri ...
- 浅谈棋牌游戏开发框架之架构
浅谈棋牌游戏开发框架之架构 关键字: 棋牌游戏 架构 框架 开发 发表文章 摘要:现在来和大家分享下怎么架构和实现框架来满足棋牌游戏需求的.一.原型符合棋牌项目框架,快速换皮,快速融合.多渠道多包体. ...
最新文章
- 树的分类,特性与遍历
- php v9 ajax 翻页,phpcms v9建站 ajax列表分页加载更多word文档教程
- 面性对象中栈内存和堆内存的理解
- python基础|字符编码
- DEDE常见问题(转)
- $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 区别
- 简简单单日赚200元,当日结算
- spring 事务控制 设置手动回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- [国家集训队] 特技飞行
- 2015.09.05 C++中类的static与const成员
- matlab搭配循环的函数按列将生成的数据写入文件
- docker managed volume - 每天5分钟玩转 Docker 容器技术(40)
- 扒一扒9.3阅兵直播如何采用虚拟现实技术
- 达摩院年终发布:2022十大科技趋势
- Web Server与App Server
- 教程:深入理解Flash的沙箱 – Application Domains
- 康考迪亚大学应用计算机科学,康考迪亚大学专业设置详情
- 锂电池充电过程的四个阶段
- 312. 戳气球(区间dp)
- 什么是SAP的统驭科目