Talk is cheap!!!
1.新建工程


2.导入SpriteKit.framework


3.引入头文件

4.代码
- (void)viewDidLoad {
[super viewDidLoad];
//1.必须创建的SKView---最外层容器
SKView *skview = [[SKView alloc]initWithFrame:self.view.bounds];
//配置容器
skview.showsFPS = YES;
skview.showsDrawCount = YES;
skview.showsNodeCount = YES;
skview.backgroundColor = [UIColor blueColor];//给容器背景色是无效的
[self.view addSubview:skview];
//2.必须创建的SKScene---场景
//SKScene的frame是只读的,创建也无需定位secene,因为默认铺满present出它的SKView,相当于把scene拉伸或压扁到场景中
SKScene *scene = [SKScene sceneWithSize:CGSizeMake(600, 600)];
//通过scaleMode可以调整scene在skview中的填充模式
scene.scaleMode = SKSceneScaleModeAspectFit;
scene.backgroundColor = [UIColor redColor];
[skview presentScene:scene];//展示
//3.创建游戏元素SKNode子类---元素
SKLabelNode *lab = [SKLabelNode labelNodeWithText:@"Hello World"];
//默认position{0,0}似乎是node的x中心,y底部?
//以左下为原点(0,0)
lab.position = CGPointMake(lab.frame.size.width*0.5, 0);
NSLog(@"---%@",[NSValue valueWithCGPoint:lab.position]);
[scene addChild:lab];
}
4.效果图

至此,最基础的创建场景、简单控件、简单调整位置结束
下面是spritekit的动画、动画组,动画组按顺序执行
需要注意的是,动画位移及缩放参照SKScene本身的size
if (self.lab) {
self.lab.name = nil;
SKAction *moveup = [SKAction moveByX:0 y:40 duration:1];
SKAction *zoom = [SKAction scaleTo:2 duration:0.5];
SKAction *sequence = [SKAction sequence:@[moveup,zoom]];
[self.lab runAction:sequence];
}
下面是SKview切换scene的转场动画(SKTrasition大概有13种转场方式,都很丑)
[skview presentScene:[SKScene sceneWithSize:CGSizeMake(400, 600)] transition:[SKTransition doorsOpenHorizontalWithDuration:2]];
SKNode可已添加子SKNode,跟随父node动作
SKSpriteNode *node = [[SKSpriteNode alloc]initWithColor:[SKColor redColor] size:CGSizeMake(40, 30)];
//设置node的位置,上下左右居中
node.position = CGPointMake(CGRectGetMidX(self.view.frame), CGRectGetMidY(self.view.frame));
[scene addChild:node];
//给node添加子node,子node跟随父node动画,自身动画不变
SKSpriteNode *left = [self createEar];
left.position = CGPointMake(-28, 6);
[node addChild:left];
SKSpriteNode *right = [self createEar];
right.position = CGPointMake(28, 6);
[node addChild:right];
//给node添加动作
SKAction *sequence = [SKAction sequence:@[[SKAction waitForDuration:1],[SKAction moveByX:100 y:-50 duration:1],[SKAction waitForDuration:1],[SKAction moveByX:-100 y:50 duration:1]]];
SKAction *repeat = [SKAction repeatActionForever:sequence];
[node runAction:repeat];
菜鸟们可能还需要看一下这个,另起了一个创建方法
-(SKSpriteNode *)createEar
{
SKSpriteNode *light = [[SKSpriteNode alloc] initWithColor:[SKColor yellowColor] size:CGSizeMake(8,8)];
SKAction *blink = [SKAction sequence:@[[SKAction fadeOutWithDuration:0.2],[SKAction fadeInWithDuration:0.2]]];
[light runAction:[SKAction repeatActionForever:blink]];
return light;
}
网友评论