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

一、说明
       今天给角色精灵增加了子弹发射功能,增加了子弹与敌对精灵的碰撞检测,当角色精灵子弹与敌对精灵碰撞后,它们都会从屏幕上消失。

二、场景层SKScene的修改

1、 在初始化场景层的方法中增加下面代码
self.physicsWorld.contactDelegate = self;

self.physicsWorld.gravity = CGVectorMake(0,0);

2、初始化场景层增加场景动力检测代理

 1 - (instancetype)initWithSize:(CGSize)size
 2 {
 3      if (self = [super initWithSize:size]) {
 4
 5         NearbyArray=[[NSMutableArray alloc]init];
 6           /*第一个场景背景节点*/
 7         UIImage  *farTextureImage=[UIImage imageNamed:@"planeBack"];
 8         SKTexture *farTexture = [SKTexture  textureWithImage:farTextureImage];
 9
10         SKSpriteNode  *farTextureSpriteOne = [SKSpriteNode spriteNodeWithTexture:farTexture size:self.size];
11         // farTextureSpriteOne.anchorPoint=CGPointMake(DEVICE_Width/2, DEVICE_Height/2);
12         farTextureSpriteOne.zPosition=0;
13          farTextureSpriteOne.position=CGPointMake(self.frame.size.width/2, self.frame.size.height/2 );
14
15
16
17
18             /*第二个场景背景节点*/
19          UIImage  *farTextureImageTwo=[UIImage imageNamed:@"planeBack"];
20          SKTexture *farTextureTwo = [SKTexture  textureWithImage:farTextureImageTwo];
21             SKSpriteNode  *farTextureSpriteTwo = [SKSpriteNode spriteNodeWithTexture:farTextureTwo size:self.size];
22         //farTextureSpriteTwo.anchorPoint=CGPointMake(0, 0);
23         farTextureSpriteTwo.zPosition=0;
24         farTextureSpriteTwo.position=CGPointMake(farTextureSpriteOne.position.x, -(self.frame.size.height/2-10));
25
26
27
28         /*第三个场景背景节点*/
29          UIImage  *farTextureImageThree=[UIImage imageNamed:@"planeBack"];
30         SKTexture *farTextureThree = [SKTexture  textureWithImage:farTextureImageThree];
31
32         SKSpriteNode  *farTextureSpriteThree =[SKSpriteNode spriteNodeWithTexture:farTextureThree size:self.size];
33
34          farTextureSpriteThree.zPosition=0;
35         farTextureSpriteThree.position=CGPointMake(farTextureSpriteOne.position.x, -(self.frame.size.height/2+self.frame.size.height-20));
36
37
38
39
40         [self addChild:farTextureSpriteOne];
41         [self addChild:farTextureSpriteTwo];
42           [self addChild:farTextureSpriteThree];
43
44         /*把三个场景背景节点加到一个数组中去,等会滚动之后,才好快速获取每个节点,重置postion*/
45         [NearbyArray addObject:farTextureSpriteOne];
46          [NearbyArray addObject:farTextureSpriteTwo];
47         [NearbyArray addObject:farTextureSpriteThree];
48
49
50
51
52          FirendPlane= [SKFoePlane createPlayerPlane];
53          FirendPlane.zPosition=1;
54          FirendPlane.position=CGPointMake(self.frame.size.width/2, 50 );
55          [self addChild:FirendPlane];
56          /*增加两个精灵产生动力之后的代理*/
57          self.physicsWorld.contactDelegate = self;
58          self.physicsWorld.gravity = CGVectorMake(0,0);
59     }
60     return self;
61
62 }

三、初始化角色精灵的子弹

 1 -(void)PlayerBulletFire
 2 {
 3
 4      bulletTime++;
 5    if (bulletTime==10) {
 6         UIImage  *RolePlaneImage=[UIImage imageNamed:@"加号"];
 7
 8         SKTexture *RolePlaneImageTextture = [SKTexture  textureWithImage:RolePlaneImage];
 9         FirendPlane.PlayerBulletSprite=[SKSpriteNode spriteNodeWithTexture:RolePlaneImageTextture size:CGSizeMake(DEVICE_Width*0.06, DEVICE_Width*0.06)];
10         FirendPlane.PlayerBulletSprite.zPosition=1;
11         FirendPlane.PlayerBulletSprite.position=CGPointMake(FirendPlane.position.x, FirendPlane.position.y+10 );
12         [self addChild:FirendPlane.PlayerBulletSprite];
13           FirendPlane.PlayerBulletSprite.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:FirendPlane.PlayerBulletSprite.size];
14
15         FirendPlane.PlayerBulletSprite.physicsBody.collisionBitMask = 1;
16
17          [FirendPlane.PlayerBulletSprite runAction:[SKAction sequence:@[[SKAction moveToY:DEVICE_Height+50 duration:1.5],[SKAction removeFromParent]]]];
18         bulletTime=0;
19     }
20
21
22 }

四、update中增加bullet初始化的方法

2 -(void)update:(CFTimeInterval)currentTime {
3
7     [self PlayerBulletFire];
8 }

五、实现场景动力检测代理

下面我说明下:因为在前面的代码中增加了对子弹和敌对精灵的重力碰撞检测的代码,所以当为此类型的两个单位碰撞到一起之后,场景就会自动执行

下面的代理,下面的代理就是将两个相互碰撞的精灵移出场景层。

1  -(void)didBeginContact:(SKPhysicsContact *)contact
2  {
3    [contact.bodyA.node removeFromParent];
4    [contact.bodyB.node removeFromParent];
5
6  }

六、案例地址截图

案例 http://download.csdn.net/detail/liaohang1987x/9612989

时间: 2024-10-24 15:39:22

IOS 2D游戏开发框架 SpriteKit-->续(完善角色功能)的相关文章

IOS 2D游戏开发框架 SpriteKit

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

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

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

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

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

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

Unity 2D游戏开发教程之摄像头追踪功能

Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以及游戏逻辑的想象空间.看来有必要让精灵拥有更多的状态,而这就是本章要讲解的主要内容. 摄像头追踪功能 游戏里的精灵可以在游戏场景中任意移动,这没什么问题,可是这就导致了一个问题,就是精灵可能移动到我们的视野之外,或者说游戏视图之外.为了解决这个问题,很多游戏都采用了"摄像头追踪"的方法,使

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

android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动

http://www.cnblogs.com/htynkn/archive/2012/01/13/libgdx_13.html 本文紧跟上文,地址:android游戏开发框架libgdx的使用(十二)—TiledMap地图的使用 地图我们创建好了接下来就是主角的出现.其实上文介绍了如何TiledMap和Stage的结合,角色的处理就简单了. 可以继承Actor类创建主角类,我就偷个懒,用Image代替. 编辑我们的TMX文件,添加一个对象层. 在主角要出现的地方加个形状 取名为play1 我们的

Unity 2D游戏相机控制(水平,竖直,角色居中三种模式)

做2D游戏的时候,无非有三种模式,一种是只有竖直向上,一种是只有水平方向,一种是有水平又有竖直方向,我最近做游戏多关卡模式,不同模式就有着不一样的相机控制,按照平时的写法,也许有很多人就一下子写了三个相机脚本,现在我用了一个枚举类型来控制三个不一样的相机,贴代码: /// <summary> ///CameraCtrl ///Created by Wang YuTing /// </summary> using UnityEngine; using System.Collectio

【2D游戏引擎】WIP反思

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