SKAction屬性介紹
在使用動作過程當中,對于屬性的設(shè)置是必不可少的,本文將說說最常用的屬性,分別是速度,時間,曲線方式.下面就分模塊說一下三個常用的屬性.我們首先先把我們的準備工作做好,創(chuàng)建好背景和精靈,代碼如下所示.
#import "GameScene.h"
@implementation GameScene
-(instancetype)initWithSize:(CGSize)size{
if (self = [super initWithSize:size]) {
self.backgroundColor = [SKColor whiteColor];
}
return self;
}
-(void)didMoveToView:(SKView *)view{
[super didMoveToView:view];
[self backgroundNode];
[self planeNode];
}
#pragma mark ----創(chuàng)建背景----
-(void)backgroundNode{
SKSpriteNode *backgroundNode = [SKSpriteNode spriteNodeWithImageNamed:@"bg_02.jpg"];
backgroundNode.position = CGPointZero;
backgroundNode.zPosition = 0;
backgroundNode.anchorPoint = CGPointZero;
backgroundNode.size = self.size;
[self addChild:backgroundNode];
}
#pragma mark ---- 創(chuàng)建兩個飛船 ----
-(void)planeNode{
SKSpriteNode *planeNode = [SKSpriteNode spriteNodeWithImageNamed:@"飛機.png"];
planeNode.position = CGPointMake(self.size.width/2, self.size.height/2);
planeNode.anchorPoint = CGPointMake(0.5, 0.5);
planeNode.zPosition = 1;
planeNode.name = @"plane";
[self addChild:planeNode];
SKSpriteNode *planeNode1 = [SKSpriteNode spriteNodeWithImageNamed:@"飛機.png"];
planeNode1.position = CGPointMake(self.size.width/2+100, self.size.height/2);
planeNode1.anchorPoint = CGPointMake(0.5, 0.5);
planeNode1.zPosition = 1;
planeNode1.name = @"plane1";
[self addChild:planeNode1];
}
speed(速度屬性)
速度因素調(diào)整動作的動畫速度师崎。例如,速度2.0倍意味著動畫運行速度的兩倍歌豺。速度的默認值為1.0.下面就是API文檔中的SKAction的speed屬性的介紹.
下面就用兩個精靈說明速度屬性.代碼如下.
#pragma mark ---- 移動飛船 ----
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
SKSpriteNode *planeNode = (SKSpriteNode *)[self childNodeWithName:@"plane"];
SKAction *moveAction = [SKAction moveToY:0 duration:1];
//設(shè)置速度
moveAction.speed = 0.5;
[planeNode runAction:moveAction];
SKSpriteNode *planeNode1 = (SKSpriteNode *)[self childNodeWithName:@"plane1"];
SKAction *moveAction1 = [SKAction moveToY:0 duration:1];
//設(shè)置速度
moveAction1.speed = 2;
[planeNode1 runAction:moveAction1];
}
@end
效果圖如下所示.
duration(時間屬性)
想要設(shè)置或者是獲取動作所需要的時間,需要使用到duration這個屬性.在API文章的duration屬性介紹如下圖所示.
在上面的速度代碼中,我們直接添加上獲取時間的代碼.如下所示,修改duration屬性也是一樣,這里我們只做獲取的操作.
#pragma mark ---- 移動飛船 ----
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
SKSpriteNode *planeNode = (SKSpriteNode *)[self childNodeWithName:@"plane"];
SKAction *moveAction = [SKAction moveToY:0 duration:1];
//設(shè)置速度
moveAction.speed = 0.5;
[planeNode runAction:moveAction];
SKSpriteNode *planeNode1 = (SKSpriteNode *)[self childNodeWithName:@"plane1"];
SKAction *moveAction1 = [SKAction moveToY:0 duration:1];
//設(shè)置速度
moveAction1.speed = 2;
[planeNode1 runAction:moveAction1];
NSLog(@"動作一的所需時間:%f",moveAction.duration);
NSLog(@"動作二的所需時間:%f",moveAction1.duration);
}
@end
控制臺打印信息如下.我們看到我們獲得了動作的時間屬性.
timingMode(曲線方式屬性)
動作的曲線方式其實就是動畫總體變化的時間曲線,動作的曲線方式的設(shè)置以及獲取需要使用到timingMode這個一個屬性,timingMode的取值一共有4個,如下表所示.
曲線方式 | 功能 |
---|---|
SKActionTimingLinear | 動畫在其持續(xù)時間內(nèi)平均分布 |
SKActionTimingEaseIn | 動畫在開始的時候較慢,然后漸漸加快 |
SKActionTimingEaseOut | 動畫開始的時候較快,然后漸漸變慢 |
SKActionTimingEaseInEaseOut | 動畫開始的時候慢,然后漸漸加速到中間,然后在漸漸變慢到完成 |
如果不對曲線方式屬性進行設(shè)置的話,默認的是SKActionTimingLinear.下面我們就用看一下代碼示例.我們在速度代碼的基礎(chǔ)上加以修改,來驗證曲線方式.
#pragma mark ---- 創(chuàng)建兩個飛船 ----
-(void)planeNode{
SKSpriteNode *planeNode = [SKSpriteNode spriteNodeWithImageNamed:@"飛機.png"];
planeNode.position = CGPointMake(self.size.width/2, self.size.height/2);
planeNode.anchorPoint = CGPointMake(0.5, 0.5);
planeNode.zPosition = 1;
planeNode.name = @"plane";
[self addChild:planeNode];
SKSpriteNode *planeNode1 = [SKSpriteNode spriteNodeWithImageNamed:@"飛機.png"];
planeNode1.position = CGPointMake(self.size.width/2+100, self.size.height/2);
planeNode1.anchorPoint = CGPointMake(0.5, 0.5);
planeNode1.zPosition = 1;
planeNode1.name = @"plane1";
[self addChild:planeNode1];
SKSpriteNode *planeNode2 = [SKSpriteNode spriteNodeWithImageNamed:@"飛機.png"];
planeNode2.position = CGPointMake(self.size.width/2-100, self.size.height/2);
planeNode2.anchorPoint = CGPointMake(0.5, 0.5);
planeNode2.zPosition = 1;
planeNode2.name = @"plane2";
[self addChild:planeNode2];
}
#pragma mark ---- 移動飛船 ----
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
SKSpriteNode *planeNode = (SKSpriteNode *)[self childNodeWithName:@"plane"];
SKAction *moveAction = [SKAction moveToY:0 duration:2];
//設(shè)置曲線方式
moveAction.timingMode = SKActionTimingEaseIn;
[planeNode runAction:moveAction];
SKSpriteNode *planeNode1 = (SKSpriteNode *)[self childNodeWithName:@"plane1"];
SKAction *moveAction1 = [SKAction moveToY:0 duration:2];
//設(shè)置曲線方式
moveAction1.timingMode = SKActionTimingEaseOut;
[planeNode1 runAction:moveAction1];
SKSpriteNode *planeNode2 = (SKSpriteNode *)[self childNodeWithName:@"plane2"];
SKAction *moveAction2 = [SKAction moveToY:0 duration:2];
//設(shè)置曲線方式
moveAction2.timingMode = SKActionTimingEaseInEaseOut;
[planeNode2 runAction:moveAction1];
}
下面我們就看一下效果圖,
總結(jié):SKAction常用屬性速度,時間,曲線方式基本就寫到這了.下一篇博客,就是游戲中的重頭戲:物理引擎,希望大家關(guān)注,謝謝.最后廢話不多說,Demo雙手奉上.