15
SPRITEKIT Тутубалин Роман AnjLab г. Владимир

SpriteKit (AnjLab Tech Talks)

  • Upload
    anjlab

  • View
    376

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

Тутубалин Роман

AnjLab

г. Владимир

Page 2: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

SKSCENEApplication UIView

SKView

SKScene

UIViewController

Настройка SKView

Создание сцены

Page 3: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

SKNODE

▸ SKSpriteNode

▸ SKLabelNode

▸ SKShapeNode

▸ SKEmitterNode

▸ SKEffectNode

▸ SKCropNode

▸ SKVideoNode

Page 4: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

SKNODE

▸ Положение, поворот, масштаб

▸ zPozition

Page 5: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

SKSPRITENODE

SKSpriteNode *moon = [SKSpriteNode spriteNodeWithImageNamed:@"moon.png"];

moon.color = [UIColor greenColor];

moon.colorBlendFactor = 0.7;

moon.png

Page 6: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

SKSHAPENODE

SKShapeNode *rect = [SKShapeNode shapeNodeWithRect:CGRectMake(0.0, 0.0, 100.0, 100.0) cornerRadius:8.0];

rect.lineWidth = 3.0;

rect.strokeColor = [SKColor redColor];

SKShapeNode *ellipse = [SKShapeNode shapeNodeWithEllipseInRect:

CGRectMake(0.0, 0.0, 50.0, 100.0)];

ellipse.fillColor = [SKColor yellowColor];

SKShapeNode *triangle = [[SKShapeNode alloc] init];

UIBezierPath *bezierPath = [UIBezierPath bezierPath];

. . .

[bezierPath closePath];

triangle.path = bezierPath.CGPath;

triangle.strokeColor = [SKColor greenColor];

triangle.lineWidth = 3.0;

Page 7: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

SKEMITTERNODE

NSSpriteNode *cloud = ...

NSString *rainPath = [[NSBundle mainBundle] pathForResource:@"rain" ofType:@"sks"];

SKEmitterNode *rain = [NSKeyedUnarchiver unarchiveObjectWithFile:rainPath];

rain.position = CGPointMake(0, cloud.size.height -10);

[cloud addChild:rain];

rain.particleScale = 2;

Page 8: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

SKEFFECTNODE

SKEffectNode *blur = [[SKEffectNode alloc] init];

moon.blendMode = SKBlendModeAdd;

[blur addChild:moon];

CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];

[filter setDefaults];

blur.filter = filter;

[self addChild:blur];

self.shouldEnableEffects = YES;

Применяет CIFilter для потомков

CIFilter - мощный фильтр CoreImage

Может быть применен для всей сцены

Page 9: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

SKCROPNODE

SKSpriteNode *brickwall = [SKSpriteNode spriteNodeWithImageNamed:@"brickwall.jpg"];

SKCropNode *crop = [SKCropNode node];

[crop addChild:brickwall];

[crop setMaskNode:moon];

[self addChild:crop];

Page 10: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

SKVIDEONODE

▸ Видео = компонент

▸ AVPlayer (AVFoundation.framework)

▸ Вся функциональность AVFoundation

[SKVideoNode videoNodeWithVideoFileNamed:@"video.mp4"];

[SKVideoNode videoNodeWithAVPlayer:player];

Page 11: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

ДЕЙСТВИЯСоздание действий

Применение действий

[SKAction moveTo:CGPointMake(100,100) duration:1.0];

[SKAction rotateByAngle:M_PI duration:1.0];

[SKAction fadeAlphaTo:0.75 duration:1.0];

[SKAction scaleBy:10.0 duration:1.0];

SKAction *move = [SKAction moveTo:aPoint duration:0.0];

[moon runAction:move];

Page 12: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

ПОВТОРЯЮЩИЕСЯ ДЕЙСТВИЯ

SKAction *move = [SKAction moveTo:aPoint duration:0.5];

SKAction *repeat = [SKAction repeatAction:move count:3];

SKAction *repeatForever = [SKAction repeatActionForever:move];

Page 13: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

ОБЪЕДИНЕНИЕ ДЕЙСТВИЙ

1 сек 2 сек 1.5 сек

[node runAction:[SKAction sequence:@[action1, action2, action3]]];

1 сек

2 сек

1.5 сек

[node runAction:[SKAction group:@[action1, action2, action3]]];

Page 14: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

SKPHYSICSBODY И SKPHYSICSWORLD

moon.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius: moon.size.width / 2];

moon.physicsBody.mass = 10;

moon.physicsBody.velocity = aCGVector;

self.physicsWorld.gravity = CGPointMake(0.0, -9.8);

self.physicsWorld.gravity = CGPointMake(0.0, +9.8);

Page 15: SpriteKit (AnjLab Tech Talks)

SPRITEKIT

СПАСИБО ЗА ВНИМАНИЕ