
轉(zhuǎn)場動畫.gif
SKScene是什么?
當進入一個游戲之后,出現(xiàn)在屏幕上的內(nèi)容叫做場景,每一個游戲都是有若干的場景組成的,在SpriteKit游戲框架中的場景就是SKScene對象組成,SKScene類似于iOS中的UIView對象.下面就說一下SKScene關(guān)于的技術(shù)點.
如何使用SKScene
- 1.新建一個NewScene,繼承自SKScene,你會發(fā)現(xiàn)在NewScene.m文件中什么都沒有,這里我們要重寫他的初始化方法
-(instancetype)initWithSize:(CGSize)size
在這個方法里,我們給我添加一個背景顏色
- (instancetype)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.backgroundColor = [SKColor redColor];
}
return self;
}
- 1.1. 除了可以添加背景顏色外,還可以添加背景圖片,這就需要用到
SKSpriteNode
// 根據(jù)一張圖片創(chuàng)建一個node 并作為場景的子node
SKSpriteNode *node1 = [SKSpriteNode spriteNodeWithImageNamed:@"znb 2.jpg"];
node1.size = self.view.bounds.size;
node1.position = CGPointMake(CGRectGetMidX(self.view.frame), CGRectGetMidY(self.view.frame));
[self addChild:node1];
- 2.現(xiàn)在有一個場景了,在原先項目中已經(jīng)有一個MyScene ,現(xiàn)在我們就用這兩個scene做轉(zhuǎn)場動畫
我們在MyScene.m 和NewScene.m的-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event中進行場景的切換,這時候,我們需要使用presentScene:(nonnull SKScene *) transition:(nonnull SKTransition *)這個方法調(diào)用過渡動畫,我們看一下都有哪些過渡動畫(SKTransition類方法),因為過渡效果太多,過渡效果需要自行演示..
+ (SKTransition *)crossFadeWithDuration:(NSTimeInterval)sec;
+ (SKTransition *)fadeWithDuration:(NSTimeInterval)sec;
+ (SKTransition *)fadeWithColor:(SKColor *)color duration:(NSTimeInterval)sec;
+ (SKTransition *)flipHorizontalWithDuration:(NSTimeInterval)sec;
+ (SKTransition *)flipVerticalWithDuration:(NSTimeInterval)sec;
+ (SKTransition *)revealWithDirection:(SKTransitionDirection)direction duration:(NSTimeInterval)sec;
+ (SKTransition *)moveInWithDirection:(SKTransitionDirection)direction duration:(NSTimeInterval)sec;
+ (SKTransition *)pushWithDirection:(SKTransitionDirection)direction duration:(NSTimeInterval)sec;
+ (SKTransition *)doorsOpenHorizontalWithDuration:(NSTimeInterval)sec;
+ (SKTransition *)doorsOpenVerticalWithDuration:(NSTimeInterval)sec;
+ (SKTransition *)doorsCloseHorizontalWithDuration:(NSTimeInterval)sec;
+ (SKTransition *)doorsCloseVerticalWithDuration:(NSTimeInterval)sec;
+ (SKTransition *)doorwayWithDuration:(NSTimeInterval)sec;
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
MyScene *scene = [[MyScene alloc] initWithSize:self.size];
[self.view presentScene:scene transition:[SKTransition doorwayWithDuration:1]];
}