最近发现Xcode自带的2D游戏开发框架SpriteKit可以直接引入到APP中进行混合开发,这就是说可以开发出既带业务应用又带游戏的苹果APP,咋怎么觉得这是一个自己的小发现....呵呵.....,查了下其实人家早有人这样做了........发现这功能我当然很开了,所以下了两个案例准备学学。以前业余时间也学过一下cocos2d-x这样的跨平台游戏框架,也做过小案例,所以感觉这个框架并不麻烦,而且比cocos2d-x简单。并且这框架我不应该像C2D-X那样学了就扔哪里不管了,因为IOS开发正是我当下工作。。也许以后我做的APP都会隐藏几个小游戏在里面,等app审核过了再放出来,多么惬意的想法。

今天是第一次笔记,我直接创建一个xcode自带的spritekit小案例来说下我对这的理解。

2D游戏涉及到使用类其实很少的,主要围绕精灵、场景两个核心的类在转,精灵就是游戏中的角色、玩家操作的角色、游戏里面的怪物角色,场景就是游戏的背景了, spriteKit里面这些类都继承与SkNode。下面有一截图你可以看下截图

如果你把上面几个类搞透测了,做个小游戏应该对你来说不麻烦, 如果要做复杂的游戏,那当然是不行了,这框架现在好像还能写OpenGL做角色渲染了,那复杂得很,复杂度不小于c语言。

下面我贴代码,我在原本官方自带案例基础上,增加了纹理类使用, 场景背景的设置,节点层的设置

一、纹理

纹理就是将整个动作分割为若干个图片,然后放到一个数组中去,然后将需要使用这个

纹理的精灵增加一个行为,将上面的纹理数组增加到行为中, 然后一个连贯的动作就出来了。

其实在ios开发中也可以给一个视图绑定一个由若干图片组合而成的动画。

我这里没有整套行为的图片,这里只是实现这个功能而已

SKScene:场景初始化时执行的代码实现这个功能。

- (instancetype)initWithSize:(CGSize)size
{

    if (self = [super initWithSize:size]) {
        /*首先创建第一个精灵节点,设置精灵节点的背景图片,这里设置精灵节点的图片方式很多,我这里也是用的纹理,你也可以直接用.backgroundimage,是一样的*/
         // SKSpriteNode *  FirstSkNodeX = [SKSpriteNode spriteNodeWithImageNamed:<#(nonnull NSString *)#>];
        UIImage  *BackgourndTextureImge=[UIImage imageNamed:@"planeBack"];
       SKTexture *BackgourndTexture = [SKTexture  textureWithImage:BackgourndTextureImge];
         SKSpriteNode *  FirstSkNode = [SKSpriteNode spriteNodeWithTexture:BackgourndTexture size:self.size];
        FirstSkNode.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
        FirstSkNode.name = @"Backgournd";
        FirstSkNode.zPosition = 0;/*将该精灵设置的位置设置到0层,0=最底层,这属性=同html中的 zindex,精灵中的层一定要记得设置,否则初始化或则经过一个动作后你看不到有可能*/
         [self addChild:FirstSkNode];

        /*下面是行为动画纹理
         BearImages.atlas=代表一个文件夹,记得文件夹后面加 .atlas,然后将整套行为切分图片放进去
          */

        SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"BearImages.atlas"];
        SKTexture *f1 = [atlas textureNamed:@"planeBack"];
        SKTexture *f2 = [atlas textureNamed:@"planeBack1"];
        NSArray *monsterWalkTextures = @[f1,f2];
         /*下面是一个循环执行的Action,这里实现的效果是,精灵不停切换monsterWalkTextures 里面的纹理图片*/
        SKAction *walkAnimation = [SKAction animateWithTextures:monsterWalkTextures timePerFrame:0.1];

        [FirstSkNode runAction:[SKAction repeatActionForever:walkAnimation]];
    }
    return self;

}
-(void)didMoveToView:(SKView *)view {

}
/*下面这个是官方原本有的方法,你自己通过xcode创建一个案例就知道了,点一下就增加一个飞机*/
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    /* Called when a touch begins */

    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInNode:self];

        SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"];
        sprite.zPosition=1;//场景中的层
        sprite.xScale = 0.15;//精灵大小
        sprite.yScale = 0.15;//精灵大小
        sprite.position = location;//精灵所在位置
        ///每秒转动一圈
     SKAction *action = [SKAction rotateByAngle:M_PI duration:1];
        ///重复行为
        [sprite runAction:[SKAction repeatActionForever:action]];

        [self addChild:sprite];
    }
}

-(void)update:(CFTimeInterval)currentTime {
    /* Called before each frame is rendered */

}

调用地方也有小改动

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;
    /* Sprite Kit applies additional optimizations to improve rendering performance */
    skView.ignoresSiblingOrder = YES;

    GameScene *scene = [[GameScene alloc]initWithSize:skView.bounds.size];

    scene.scaleMode = SKSceneScaleModeAspectFill;

    [skView presentScene:scene];
}

IOS 2D游戏开发框架 SpriteKit的更多相关文章

  1. IOS 2D游戏开发框架 SpriteKit-->续(创建敌对精灵)

    这次包括之后讲的spritekit 我都会围绕一个案例来说,这个案例就是一个简单的2d飞机大战游戏,今天这里我讲创建敌对精灵,就是敌对飞机,敌对飞机不停的被刷新到屏幕上.....当然这里涉及到的类其实 ...

  2. IOS 2D游戏开发框架 SpriteKit-->续(创建用户角色精灵--原创)

    一.主要实现   今天spritekit实现创建玩家角色精灵(SKSpriteNode *), 增加角色精灵的手势操作,这里增加的手势计算方法与objective-c中是不一样的,因为objectiv ...

  3. IOS 2D游戏开发框架 SpriteKit-->续(postion,锚点,游戏滚动场景)

    一. Postion 这里的postion和app开发中的layer.postion是一样的,postion的值代表该视图在父节点中的相对位置, 比如一个试图的父节点是self.view, 这里我们想 ...

  4. IOS 2D游戏开发框架 SpriteKit-->续(完善角色功能)

    一.说明       今天给角色精灵增加了子弹发射功能,增加了子弹与敌对精灵的碰撞检测,当角色精灵子弹与敌对精灵碰撞后,它们都会从屏幕上消失. 二.场景层SKScene的修改 1. 在初始化场景层的方 ...

  5. Unity3d Platformer Pro 2D游戏开发框架使用教程

    前言 Platformer Pro框架是Unity3d AssetStore上一个非常强大和受欢迎的2d游戏开发框架,这个教程的大部分翻译于官方文档,一部分是工作总结,还有一部分是视频教程文档化.这个 ...

  6. 初识phaser框架——开源的HTML5 2D游戏开发框架

    背景: 在网上看到,65行实现flappy bird,感到很好奇.原来是使用开源的2D游戏框架 phaser开发的. 什么是phaser2D游戏开发框架呢? 借鉴与网上的资料: 1.    Phase ...

  7. iOS开发实战-基于SpriteKit的FlappyBird小游戏

    写在前面 最近一直在忙自己的维P恩的事情 公司项目也是一团乱 于是...随手找了个游戏项目改了改就上线了,就当充数了. SpriteKit简介 SpriteKit是iOS 7之后苹果推出的2D游戏框架 ...

  8. CosmosEngine - Unity3D /2D 轻量级游戏开发框架

    CosmosEngine https://github.com/mr-kelly/CosmosEngine 快速入门 简介 特性 约定 整体架构图 使用经验 工作流 未来功能 快速入门 1.将NGUI ...

  9. 基于 Cocos2d-x-lua 的游戏开发框架 Dorothy 简介

    基于 Cocos2d-x-lua 的游戏开发框架 Dorothy 简介 概述 Dorothy 是一个在 Cocos2d-x-lua 基础上发展起来的分支, 它去掉 Cocos2d-x-lua 那些过多 ...

随机推荐

  1. redis数据结构整理(一)

    摘要: 0.redis安装 1.redis的常用数据结构类型 1.1  String 1.2  List 1.3  Set 1.4  Sorted Set 1.5  Hash 2.redis是单进程单 ...

  2. iOS开发——高级语法篇&继承、实现、依赖、关联、聚合、组合的联系与区别

    继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者 ...

  3. 找到SQL Server的序列号

          有时候希望获取当前机器上安装的SQL Server序列号,但注册表中序列号是经过加密的,因此我写了一个小工具获取当前SQL Server的序列号.程序比较粗糙,没有做错误验证.       ...

  4. 用javascript动态创建并提交表单form,表格table

    <script> //helper function to create the formfunction getNewSubmitForm(){ var submitForm = doc ...

  5. javascript中数组的22种方法

    × 目录 [1]对象继承 [2]数组转换 [3]栈和队列[4]数组排序[5]数组拼接[6]创建数组[7]数组删改[8]数组位置[9]数组归并[10]数组迭代[11]总结 前面的话 数组总共有22种方法 ...

  6. Mina、Netty、Twisted一起学(七):发布/订阅(Publish/Subscribe)

    消息传递有很多种方式,请求/响应(Request/Reply)是最常用的.在前面的博文的例子中,很多都是采用请求/响应的方式,当服务器接收到消息后,会立即write回写一条消息到客户端.HTTP协议也 ...

  7. Unity3D 游戏前端开发技能树(思维导图)

    如果做游戏也是一种游戏,那么这个游戏的自由度实在是太高了.(导图源文件链接:http://pan.baidu.com/s/1eSHpH5o 密码:qzl5) 最近要用思维导图软件Xmind把自己的思路 ...

  8. Lagrange插值公式

    朋友@耗子突然问起我一个 Lagrange 插值公式的问题,发现几年没碰差不多要忘干净了,于是找了本教科书来翻了翻,顺便把几个要点整理成文,以备日后查阅. 作者: peghoty 出处: http:/ ...

  9. Adaptive Placeholder – 自适应的占位符效果

    在早期,我们都是通过使用 JavaScript 来实现占位符功能.而现在,HTML5 原生提供的 placeholder 属性让我们在现代浏览器轻松就能实现这样的功能.这里向大家分享一个自适应的占位符 ...

  10. 配置Hibernate二级缓存时,不能初始化RegionFactory的解决办法

    配置Hibernate 二级缓存时,出现以下bug提示: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder&quo ...