Sprite Kit Learning Note

Sprite Kit Learning Note

手動的動作系統核心思想

定義標準速率值:Point per Second

計算位置偏移量:即當前位置與目標位置的向量差

正交化偏移向量:得到偏移量的方向單位向量

計算新速度矢量:使方向向量與速率相乘,得到速度矢量

在每幀更新位置:即用速度適量乘以標量沒幀更新的時間差

碰撞檢測的基本思想

AABB盒幾盒邊界檢測:在update:檢測目標結點之間的frame的矩形是否相交。

預處理:通過結點name枚舉結點,必要時需要處理縮小結點的farme,以dx*dy

SKAction

Move Actions : 區分MoveTo:和MoveBy:及其可逆性

Sequence Actions : 序列動作,以及序列動作的可逆性

Group Actions : 併發執行多個動作,其時間由最長時間的動作決定

Wait for duration action : 等待動作,一般用作序列動作的緩衝

Run block and selector actions : 這樣的Action可以運行一段Blocks

Repeat actions : 可以設定重複一個SKAction的動作,或者永遠重複

Reversing actions : 這樣的動作是可逆的

Shared actions : 通過持有一個動作的引用而非臨時變量優化性能

Sound actions : 可以通過SKAction直接播放音樂

Texture Animation actions : 用圖片組成動畫動作

SKSpriteNode

name : 標記結點,用來枚舉查找,通過//來查找結點的結點

xScale : 縮放值,可用scaleTo方法調整,而zRotation :用來旋轉角度,可用來旋轉結點

SKBlendMode:默認爲alpha,可以渲染紋理的透明像素

關於Blocks

內存分配:Blocks的內存由幀分配,不能修改無__Block修飾的對象或者非對象

引用計數:self持有Blocks的引用,Blocks持有其參數和__Blocks修飾的引用

Scroll - 滾屏的思想

分層結構:可以分爲場景層和背景層,場景層爲可視範圍,背景層爲背景和其他結點

基本思想:在update:方法以_dt間隔讓使背景層的適量速度乘以_dt移動距離

背景保持:檢測背景的錨點在場景層的座標(左下角)與背景寬度的負數關係

Coordinate System

基本思想:每個節點的錨點是每個節點座標系的原點,其位置是在父節點座標系的座標

座標變換:也可以通過convertPoint:from(to)Node計算父節點在子節點座標系的座標

常用場景:滾屏分層結構下的邊緣檢測,需要將背景層的座標轉換到場景層求絕對距離

基於繼承的遊戲架構思想

基本思想:通過抽象類解耦並實現屬性和初始化方法等共用,減少代碼量

遊戲場景邏輯分層的思想

基本思想:各個SKNode層專注自己的事務,各司其職。

一些應用:如傳統空戰遊戲,HUD層、Player層、Scene層,均爲SKNode

一些技巧:用屬性列表初始化精靈位置是個不錯的選擇

HUD一些設計思想

基本思想:字符串等代替Texture等紋理

一些應用:如用NSString代替生命值,通過截斷字符扣血。

SKTexture

基本概念:用於渲染(render)結點的紋理,是一張或多張圖片

一些細節:儘量避免臨時多次初始化,應用GCD確保靜態初始化一次

一些應用:用臨時的SKView渲染後返回Texture

SKLabelNode

一些要點:水平和垂直對齊模式,設置位置,設置字體等等

SKTUtilities

一些細節:注意全局預編譯提,供了的播放音樂隨機數邊緣控制,向量數學內聯方法

SKEmitterNode

基本概念:粒子發射器,用來產生粒子效果,一般用編輯器編輯歸檔初始化

關鍵幀列:KeyFrameSequence及其插值方法,設置關鍵幀在粒子生命週期的百分位置

目標節點:TargetNode初始位置爲發射器,但是產生位置就好像是制定結點發出的。

SKPhysicBody

基本概念:結點屬性,以一個大致圖形包圍結點用來做碰撞檢測和模擬物理效果

邊緣檢測:PhysicBody的Static屬性EdgeLoopBodies的邊緣屬性,無質量碰撞等屬性

受力分析:衝擊力和持續作用力,分別產生動量不同,作用效果不同

碰撞檢測:定義獨一無二BitMask檢測碰撞最多32個,通過做&運算來檢測碰撞

碰撞代理:用beginContact實現遊戲邏輯,用endContact做一些如離開警報之類的

SKPhysicContact

基本概念:代理方法中contact對象包含bodyA和B,用他們的BitMask做|運算

一般應用:用運算得到值與目標BistMask做&運算,然後分情況討論

其他屬性:contact對象還包含碰撞位置和碰撞衝力的大小

SKPhysicJoints

固定鏈接:Fixed Joints即將兩個物理體固定,由物理世界添加

限制鏈接:Limit Joints即有限長不限短的繩子固定

彈性鏈接:Spring Joints即彈簧可自由伸長變短

轉動鏈接:Pin Joints即固定一個支點物體繞點旋轉

滑動鏈接:Sliding Joints即兩物體定軸滑動

SKCropNode

基本概念:提供結點遮罩特效,addChild + setMask = 遮罩效果,任意節點 

SKVideoNode

基本概念:提供結點播放視頻,通常繼承,必須有AVPlayer屬性加載視頻,可以遮罩 

SKShapeNode

基本概念:自定義凸多邊形,用UIUIBezierPath描邊定義輪廓,可以設置物理體等

一些細節:貝塞爾繪製必須逆時針,不交叉的閉合凸多邊形,不能作爲maskNode

SKEffectNode

基本概念:通過設置CIFilter,實現漸變、旋轉、調色等特效,對所有其子節點均有效

一些細節:inputTime描述了duration的經過的百分比,範圍是0到1

工作原理:每幀通過Filter屬性渲染特效,inputTime的變化可以實現漸變特效

其他屬性:inputImage和targetImage,如其名分別代表輸入和輸出

SKTextureAtlas

基本概念:紋理地圖集高校控制源文件,一一對應無需遍歷Bundle

TiledMaps

基本概念:用於渲染(render)結點的紋理,是一張或多張圖片

一些細節:避免臨時多次初始化,用GCD靜態初始用臨時的SKView渲染後返回Texture

一些細節:原始加載行列顛倒,雙層循環嵌套一行N列,列用Ly - ((n - 0.5) *h)

一些細節:像素遊戲主義將結點紋理的filteringMode改爲Nearest

一些細節:gridSize是網格的數目,layerSize是網格數目乘以網格大小

關於滾屏:滾動背景,則永遠使得屏幕原點與點擊目標做差,然後移動背景到原點

邊界檢測:用抽象的SKNode以EdgeLoop的物理體初始化,並以CGRect包圍背景

黑邊檢測:錨點原點左下角,屏幕焦點必須在width / 2和layer.size.width - width之間

捲動速率:通過迭代背景位置差10%,可以使得攝像機滾動更流暢

座標轉換:網格到座標,用真實座標除以瓦片大小,座標到網格,(col,L-row)

精靈移動:先從網格到座標,然後再製定移動路徑,網格座標判斷是否合法

設置障礙:通過對tile設置物理體和碰撞分類設置障礙 - 方式1

設置障礙:通過精靈檢測tile的物理題是否爲障礙的分類掩碼 - 方式2

全局標識:GID,從1開始,0代表沒有瓦片,可以用過proForGID獲取瓦片屬性字典

對象圖層:可以獲取到TileMap實例的TMXObjGroup,包含對象字典,但無精靈類

對象塗層:通過group的objNamed屬性獲取單個對象或數組對象是字典包含位置信息

遊戲暫停:節點的paused屬性可以用來短暫開閉及其子節點的SKAction

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章