IOS 2D遊戲開發架構 SpriteKit-->續(完善角色功能),iosspritekit--

來源:互聯網
上載者:User

IOS 2D遊戲開發架構 SpriteKit-->續(完善角色功能),iosspritekit--

一、說明
       今天給角色精靈增加了子彈發射功能,增加了子彈與敵對精靈的碰撞檢測,當角色精靈子彈與敵對精靈碰撞後,它們都會從螢幕上消失。

二、情境層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 *)contact2  {3    [contact.bodyA.node removeFromParent];4    [contact.bodyB.node removeFromParent];5    6  }

 

六、案例地址

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.