SpriteKit之漫談SKAction常用屬性


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屬性介紹如下圖所示.

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];


}


下面我們就看一下效果圖,

各個精靈對象設(shè)置的曲線方式
效果圖



總結(jié):SKAction常用屬性速度,時間,曲線方式基本就寫到這了.下一篇博客,就是游戲中的重頭戲:物理引擎,希望大家關(guān)注,謝謝.最后廢話不多說,Demo雙手奉上.
-->動作的屬性Demo??
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末利耍,一起剝皮案震驚了整個濱河市勤篮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異屈张,居然都是意外死亡,警方通過查閱死者的電腦和手機袱巨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門阁谆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愉老,你說我怎么就攤上這事场绿。” “怎么了嫉入?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵焰盗,是天一觀的道長。 經(jīng)常有香客問我咒林,道長熬拒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任垫竞,我火速辦了婚禮澎粟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己活烙,他們只是感情好徐裸,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啸盏,像睡著了一般倦逐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宫补,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音曾我,去河邊找鬼粉怕。 笑死,一個胖子當著我的面吹牛抒巢,可吹牛的內(nèi)容都是我干的贫贝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼蛉谜,長吁一口氣:“原來是場噩夢啊……” “哼稚晚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起型诚,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤客燕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狰贯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體也搓,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年涵紊,在試婚紗的時候發(fā)現(xiàn)自己被綠了傍妒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡摸柄,死狀恐怖颤练,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驱负,我是刑警寧澤嗦玖,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站跃脊,受9級特大地震影響踏揣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匾乓,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一捞稿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦娱局、人聲如沸彰亥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽任斋。三九已至,卻和暖如春耻涛,著一層夾襖步出監(jiān)牢的瞬間废酷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工抹缕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留澈蟆,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓卓研,卻偏偏與公主長得像趴俘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奏赘,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,071評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理寥闪,服務(wù)發(fā)現(xiàn),斷路器磨淌,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 2017/8/8疲憋。無為。焦點解決分享第26天梁只。最近十來天柜某,每天手抄(焦點解決短期咨詢)的一個小節(jié),然后對照劉老師的...
    無為wyw閱讀 214評論 0 0
  • 第一部分 自我介紹 領(lǐng)跑新學(xué)期敛纲;成長無壓力喂击。 各位同學(xué),大家好淤翔!歡迎大家來到視界窗翰绊,來到我的課堂! 我是視界窗的...
    能果_c50a閱讀 663評論 0 1
  • 木蘭沁閱讀 283評論 0 1