美文网首页ios程序员iOS Developer
SpriteKit框架之浅谈SKNode及SKSpriteNod

SpriteKit框架之浅谈SKNode及SKSpriteNod

作者: 神经骚栋 | 来源:发表于2016-08-17 22:13 被阅读3556次

    做什么都要不忘初心,对吗?热爱编程,那就把它做好.

    简介


    在一个游戏的场景当中几乎所有的内容都是由图像实现的,在开发过程中每一个图像都被称为精灵,不管是背景还是各种物体都属于精灵.在场景中所看到的所有内容都是有结点SKNode类以及它的子结点类构成的.这边博客主要讲的是SKNode相关的技术点以及SKNode最常用的子类SKSpriteNode的使用.

    SKNode的子类列表


    SKNode大致包含几个大类,如下图表所示.
    类名称 功能简介
    SKSpriteNode 用于绘制精灵纹理
    SKVideoNode 用于播放视频
    SKLabelNode 用于渲染文本
    SKShapeNode 用于渲染基于Core Graphics 路径的形状
    SKEmitterNode 用于创建和渲染粒子系统
    SKCropNode 用于使用遮罩来裁剪子结点
    SKEffectNode 用于在子结点上使用Core Image滤镜

    SKSpriteNode介绍


    SKSpriteNode是我们最常用的SKNode的子类,也就是我们常说的精灵.一个SKSpriteNode实例是一个节点,可以绘制带图片,有色方块,经过颜色混合的图片。

    SKSpriteNode的创建


    SKSpriteNode常用的创建方法有两种类方法,一种是使用图片名称直接创建一个SKSpriteNode对象,一个是使用纹理创建一个SKSpriteNode对象,方法如下.

    + spriteNodeWithImageNamed: //通过图片文件创建并返回一个纹理精灵。
    + spriteNodeWithTexture: // 通过纹理实例创建并返回一个纹理精灵。

    不管是使用图片名称直接创建还是使用纹理实例创建,我们都需要图片,我们就往工程中拖两张图片,一张作为背景,一张作为其中的一个精灵.在我们创建好的SKScene中 -(void)didMoveToView:(SKView *)view 方法中 创建我们的两个精灵并且添加到图像上.代码如下.

    -(void)didMoveToView:(SKView *)view{
    
        [super didMoveToView:view];
       
     
        SKSpriteNode *node = [SKSpriteNode spriteNodeWithImageNamed:@"image52.jpg"];
        
        node.position = CGPointZero;
        
        node.anchorPoint = CGPointZero;
        
        node.size = self.size;
        
        [self addChild:node];
    
        SKSpriteNode *people = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"image2232.png"]];
        
        people.anchorPoint = CGPointMake(0.5, 0.5);
        
        people.position = CGPointMake(100, 100);
        
        people.name = @"people";
        
        [self addChild:people];
        
        
    }
    
    

    效果图如下.

    效果图

    SKSpriteNode属性介绍


    上一个模块说到SKSpriteNode的创建,那么参照上面,下面说一下SKSpriteNode的几个常用属性.属性东西就需要小伙伴们一一使用了,尝试了.这里我就不多说了.

    属性名称 类型 功能简介
    position CGPoint SKSpriteNode对象的x,y轴的位置信息
    zPosition CGFloat SKSpriteNode对象的z轴位置,与ignoresSiblingOrder有关.如果ignoresSiblingOrder的值为YES,就是按照z轴的信息绘制,如果为NO,就是按照代码顺序绘制精灵.可以想象入图层类似.
    anchorPoint CGPoint SKSpriteNode对象的锚点信息,锚点一般是与position配合使用的.锚点的相关知识,我的博客中有,如果有疑问,可以往前翻找
    zRotation CGFloat SKSpriteNode对象的角度信息,通过设置他可以设置SKSpriteNode对象的的旋转角度
    size CGSize SKSpriteNode对象的宽度和高度信息的设置
    scale CGFloat SKSpriteNode对象的大小缩放比例
    xScale CGFloat SKSpriteNode对象的宽度大小缩放比例
    yScale CGFloat SKSpriteNode对象的高度大小缩放比例
    name NSString SKSpriteNode对象的名字,也就是SKSpriteNode对象的唯一标识符
    physicsBody SKPhysicsBody SKSpriteNode对象在物理引擎中的物理模型
    speed CGFloat KSpriteNode对象的速度
    alpha CGFloat KSpriteNode对象的透明度
    hidden BOOL KSpriteNode对象是否隐藏

    何去何从


    下一篇博客我可能会对SpriteKit框架中的动作进行详细的说明,其实游戏的组成一般都是有这么几大块组成的:场景,精灵,动作,物理引擎,游戏逻辑.所以SKSpriteNode在游戏中占着比较高的比重,它的属性也要多加练习掌握,谢谢阅读,如果有什么疑问可以在下面的评论区提出,我会及时回复您的.😁

    相关文章

      网友评论

      • Pikdays:怎么创建一个 水平滚动 UICollectionView ???
      • 秋天的橘子:你好, 我现在在用swift,我想问一下, 我怎么点击获取图片去点击呢? 我点击图片去碰撞一个物体,而不是点击屏幕。
      • 神码:请问项目创建的时候底下的integrate GameplayKit 要勾选吗?
      • e4d7c7fbe645:666,写的很棒。虽然不做游戏,但是很想了解这些部分,看了这篇文章感觉稍微明白了点。
      • King_Whb:注意点:如果背景精灵node 没有设置 size,第二个精灵就不会显示了 :grin: ,我每次把自己的错误点放这上边会不会让楼主比较烦啊 :joy:
      • King_Whb:好佩服,你这都是自己尝试,然后一点点总结的么?然后还写文章,这个工作量真不小
        King_Whb:@神经骚栋 恩恩 在认真看 :joy:
        神经骚栋: @King_Whb 嗯嗯,写了一个月吧,有一篇动作的…SKaction大全,那里面一定要每个都试一下,因为那是所有的动作,很有用…可能那篇有点长………

      本文标题:SpriteKit框架之浅谈SKNode及SKSpriteNod

      本文链接:https://www.haomeiwen.com/subject/attssttx.html