一個簡單的Sprite Kit 小游戲

SpriteKit.png

啟動Xcode和選擇新的項目文件從主菜單。選擇iOS \應用\ SpriteKit游戲模板并單擊“下一步”。

01.png

輸入你的游戲名稱品名,選擇iPhone設備運行一下:

02.png

SpriteKit物理和碰撞檢測


SpriteKit帶有一個物理引擎內置的,可以模擬真實的運動和碰撞檢測。我們打算用SpriteKit的物理引擎將我們的飛船,飛船和導彈之間的碰撞檢測。我們將在下面的步驟中建立我們的游戲:

1、加入游戲的主要角色(飛船)在屏幕上(1)
2、添加滾動的背景(1)
3、增加一個導彈,宇宙飛船可以碰撞(2)
4、顯示游戲結束屏幕時,飛船和導彈給重放選項碰撞(2)

添加的主要特征

 #import "MyScene.h"
@implementation MyScene{ 
SKSpriteNode *ship;
SKAction *actionMoveUp;
SKAction *actionMoveDown;
}
-(id)initWithSize:(CGSize)size {
   if (self = [super initWithSize:size]) {
     self.backgroundColor = [SKColor whiteColor]; 
  //Making self delegate of physics World       
  self.physicsWorld.gravity = CGVectorMake(0,0);    
  self.physicsWorld.contactDelegate = self; 
  } 
  return self;
}
@end

添加 飛船和剛體:

  -(void)addShip{ 
    //initalizing spaceship node 
  SKSpriteNode * ship = [SKSpriteNode new];
   ship = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; 
  [ship setScale:0.5]; ship.zRotation = - M_PI / 2;
   //Adding SpriteKit physicsBody for collision detection 
  ship.physicsBody = [SKPhysicsBody  bodyWithRectangleOfSize:ship.size];   
  ship.physicsBody.categoryBitMask = shipCategory; 
  ship.physicsBody.dynamic = YES; 
  ship.physicsBody.contactTestBitMask = obstacleCategory; 
  ship.physicsBody.collisionBitMask = 0; 
  ship.name = @"ship";
  ship.position = CGPointMake(120,160);
  [self addChild:ship]; 
  actionMoveUp = [SKAction moveByX:0 y:30 duration:.2]; 
  actionMoveDown = [SKAction moveByX:0 y:-30 duration:.2];
  }

02.png

背景滾動

- (void)initalizingScrollingBackground  
{
for (int i = 0; i < 2;i++) {
    SKSpriteNode *bg = [SKSpriteNode spriteNodeWithImageNamed:@"bg"];
    bg.position = CGPointMake(i *bg.size.width, 0); 
    bg.anchorPoint = CGPointZero;
    bg.name = @"bg";
    [self addChild:bg];
}

設置障礙物

// moveObstacle [?ɑbst?k(?)l] 障礙物
- (void)moveObstacle
{
NSArray *nodes = self.children;

for (SKNode *node in nodes) {
    if (![node.name isEqual:@"bg"]&& ![node.name isEqual:@"ship"]) {
        SKSpriteNode *ob = (SKSpriteNode *) node;
        CGPoint obVelocity = CGPointMake(-OBJECT_VELOCITY, 0);
        CGPoint amtToMove = CGPointMultiplyScalar(obVelocity, _dt);
        
        ob.position = CGPointAdd(ob.position, amtToMove);
        if (ob.position.x < -100) {
            // 移除父節點
            [ob removeFromParent];
        }
    }
  }
}

定時器更新:

- (void)update:(CFTimeInterval)currentTime
{
if (_lastUpdateTime) {
    _dt = currentTime - _lastUpdateTime;
} else {
    _dt = 0;
}

_lastUpdateTime = currentTime;

if (currentTime - _lastMissileAdded >1) {
    _lastMissileAdded = currentTime + 1;
    // 添加導彈
    [self addMissile];
}

// 移除背景
[self moveBg];
// 移除障礙物
[self moveObstacle];
}
end.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容