SpriteKit初探的解释--自学X…

来源:互联网 发布:快剪视频软件 编辑:程序博客网 时间:2024/06/15 11:25
原文地址:SpriteKit初探的解释--自学XCode5作者:数据之光

SpriteKit里面,有几个关键的class:

SKView,理解为页面,也就是容纳场景(SKScene)的容器,相当于普通应用的View;

SKScene:场景,一些元素比如人物、武器都是通过场景展示给用户的;

SKView和SKScene的关系,通常用ViewController.m的这几句构造联系:

- (void)viewDidLoad    //这个方法是关键

{

   [super viewDidLoad];

   

   SKView * skView = (SKView *)self.view;

   skView.showsFPS= YES;

   skView.showsNodeCount= YES;

      //skView是视图

   //------------------以下几句是联系:

   SKScene * scene =[MyScene sceneWithSize:skView.bounds.size];

   scene.scaleMode = SKSceneScaleModeAspectFill;

   //skScene是场景

   

   //Present the scene.

   [skView presentScene:scene];   //添加场景

}


skLabelNode:理解为一个标签类,这样设置属性:

-(SKLabelNode*)newHelloNode    //返回一个SKLabelNode

{

   SKLabelNode *helloNode =[SKLabelNodelabelNodeWithFontNamed:@"Chalkduster"];  //设置字体

   helloNode.name = @"helloNode"     //Key-Value系统

   helloNode.text = @"游戏世界";

   helloNode.fontSize= 44;

   helloNode.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

   return helloNode;

}


skScene和skNode通常这样写:

-(void)createSceneContents

{

   NSLog(@"createSceneContents");

   self.backgroundColor = [SKColor blueColor];

   self.scaleMode = SKSceneScaleModeAspectFit;

   [self addChild:[self newHelloNode]];

}

-(SKLabelNode*)newHelloNode    //返回一个SKLabelNode

{

   SKLabelNode *helloNode =[SKLabelNodelabelNodeWithFontNamed:@"Chalkduster"];  //设置字体

   helloNode.name = @"helloNode"     //Key-Value系统

   helloNode.text = @"游戏世界";

   helloNode.fontSize= 44;

   helloNode.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

   return helloNode;

}


skAction:动画类,

SKAction *moveUp =[SKActionmoveByX:0 y:100 duration:0.5];

      SKAction *zoom =[SKActionscaleTo:2 duration:0.25];

      SKAction *pause =[SKActionwaitForDuration:0.5];

      SKAction *fadeAway =[SKActionfadeOutWithDuration:0.25];

      SKAction *remove =[SKActionremoveFromParent];

      SKAction*moveSequence =[SKActionsequence:@[moveUp,zoom, pause, fadeAway, remove]];  //动画数组


skNode:对象类,skLabelNode的superClass,

SKNode *helloNode =[self childNodeWithName:@"helloNode"];

和SkAction之间的交互这样写:

[helloNode runAction:moveSequence completion:^{//......}];


skSpriteNode:精灵类,写的时候,继承自SKScene:

SKSpriteNode*spaceship =[self newSpaceship];

   spaceship.position= CGPointMake(CGRectGetMidX(self.frame),                         CGRectGetMidY(self.frame));

   [self addChild:spaceship];


-(SKSpriteNode*)newSpaceship //返回一个SKSpriteNode对象理解为里面的东东

{

   SKSpriteNode *hull =[[SKSpriteNodealloc] initWithColor:[SKColor grayColor] size:CGSizeMake(33,24)];

   

   SKAction *hover =[SKActionsequence:@[

                                    [SKActionwaitForDuration:1.0],

                                    [SKActionmoveByX:100y:50.0 duration:1.0],

                                    [SKActionwaitForDuration:1.0],

                                    [SKActionmoveByX:-100.0y:-50 duration:1.0]]];

          //动作为hover

   [hull runAction: [SKAction repeatActionForever:hover]];

   

   SKSpriteNode*light1 = [self newLight];

   light1.position= CGPointMake(-28.0,6.0);  //参考系是ship

   [hull addChild:light1];

   

   SKSpriteNode*light2 = [self newLight];

   light2.position= CGPointMake(28.0,6.0);

   [hull addChild:light2]; //添加两个方块

   

   hull.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:hull.size];      //重力影响掉落

   hull.physicsBody.dynamic = NO//重力影响取消

   

   return hull;

}


- (SKSpriteNode*)newLight

{

   SKSpriteNode *light =[[SKSpriteNodealloc] initWithColor:[SKColor yellowColor] size:CGSizeMake(8,8)];

   

   SKAction *blink =[SKActionsequence:@[

                                    [SKActionfadeOutWithDuration:0.25],

                                    [SKActionfadeInWithDuration:0.25]]];

   SKAction *blinkForever =[SKActionrepeatActionForever:blink];

   [light runAction:blinkForever];

   

   return light;  

}


函数指针指向的方法:

staticinlineCGFloatskRandf()

{

   return rand() / (CGFloat) RAND_MAX;

}


staticinlineCGFloatskRand(CGFloat low, CGFloat high)

{

   return skRandf() * (high - low) + low;

}


- (void) addRock

{

   SKSpriteNode *rock =[[SKSpriteNodealloc] initWithColor:[SKColor brownColor] size:CGSizeMake(8,8)];

   rock.position = CGPointMake(skRand(0, self.size.width), self.size.height-50);

   rock.name = @"rock";

   rock.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:rock.size];

   rock.physicsBody.usesPreciseCollisionDetection=YES;

      //使用精确的检测碰撞

   [self addChild:rock];

}


代码示例源于:http://blog.csdn.net/kobbbb/article/details/9093601

0 0