IOS 2D游戏开发框架 SpriteKit

最近发现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];
}
时间: 2024-10-13 14:12:37

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

IOS 2D游戏开发框架 SpriteKit--&gt;续(创建敌对精灵)

这次包括之后讲的spritekit 我都会围绕一个案例来说,这个案例就是一个简单的2d飞机大战游戏,今天这里我讲创建敌对精灵,就是敌对飞机,敌对飞机不停的被刷新到屏幕上.....当然这里涉及到的类其实还是,精灵,和材质两个类,这两个类前两篇的案例中已经出现过,使用方法都一样,主要看逻辑,我这里主要是实现每间隔一段时间屏幕就刷新一个敌对飞机.飞机从屏幕高度为起点往下移动,当potion移动到0时将敌对飞机移出. 1 /*这个方法是spritekit 的场景自带的,每过一秒就会被调用*/ 2 -(v

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

一.主要实现   今天spritekit实现创建玩家角色精灵(SKSpriteNode *), 增加角色精灵的手势操作,这里增加的手势计算方法与objective-c中是不一样的,因为objective-c使用的坐标系与spritekit使用的坐标系不是一样的,后面还增加了精灵的碰撞检查代码. 二. SKSpriteNode手势 SKSpriteNode类自带5个手势监测的方法, // 手指按下的时候调用 1. -(void)touchesBegan:(NSSet<UITouch *> *)t

IOS 2D游戏开发框架 SpriteKit--&gt;续(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

IOS 2D游戏开发框架 SpriteKit--&gt;续(完善角色功能)

一.说明       今天给角色精灵增加了子弹发射功能,增加了子弹与敌对精灵的碰撞检测,当角色精灵子弹与敌对精灵碰撞后,它们都会从屏幕上消失. 二.场景层SKScene的修改 1. 在初始化场景层的方法中增加下面代码 self.physicsWorld.contactDelegate = self; self.physicsWorld.gravity = CGVectorMake(0,0); 2.初始化场景层增加场景动力检测代理 1 - (instancetype)initWithSize:(C

Phaser:开源的HTML5 2D游戏开发框架

Phaser is a fun, free and fast 2D game framework for making HTML5 games for desktop and mobile web browsers, supporting Canvas and WebGL rendering. Phaser是一个自由免费 的用于桌面及移动HTML5游戏开发的2D游戏框架,支持Canvas标签和WebGL渲染. http://phaser.io Github:phaser

【2D游戏引擎】WIP反思

WIP(Working In Progress)是我初学游戏引擎开发时候开发的一个2D游戏引擎,当时计划为它实现类似Unity一样的编辑器,具有和Unity相似的工作流,但是由于水平不够,走了很多弯路,闭门造车,做了很多错误的设计,导致很多地方反人类和难以维护,加之时间有限,所以已经停止了对它的继续开发.由于停止了开发,又不想把所有资料都全部搞丢,所以把在开发中学到的东西,和一些自己的思考都记录一下.以便后可以参考. 他最后可以实现这些功能,不过实现起来远比成熟的引擎蛋疼得多: 脚本游戏编程 基

iOS cocos2d游戏引擎的了解之一

ios游戏引擎之Cocos2d(一) cocos2d是一个免费开源的ios游戏开发引擎,并且完全采用object-c进行编写,这对于已经用惯object-c进行ios应用开发的童鞋来说非常容易上手.这些也是我推荐使用cocos2d进行ios游戏开发的原因,当然从字面上已经可以开出来,这是一款专注于"2d"游戏的开发引擎,您也可以自己编写3d渲染代码或者使用第三方的解决方案,在cocos2d里加载显示3d模型.此外对于3d,也可以选用cocos3d来进行游戏开发.好了,废话不多说,还是先

IOS 关灯游戏

一, 首先为window创建根视图控制器 在AppDelegate.h文件中 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions //为window创建根视图控制器 RootViewController *rootViewController = [[RootViewController alloc]init]; self.wind

关于《Unity3D/2D游戏开发从0到1》书籍再版说明

关于<Unity3D/2D游戏开发从0到1>第一版本在2015年7月1日全国发行,累计得到不少国内高校教师.培训机构的好评.但是由于Unity官方对于技术不断的升级与版本的快速迭代,基于Unity4.6版本的教学知识体系,则略显滞后.    随着2017年7月份,Unity2017.1正式版本的推出,<Unity3D/2D游戏开发从0到1>书籍的再版,则正式提上日程. 目前2017年8月份再版工作已经进行过半,现在给各位小伙伴汇报一下工作,希望得到更好的建议.现在说说第二版本的总体