iOS Swift 熊貓🐼跑酷 第一個小項目
前言:想用swift 寫個小游戲 慢慢轉化 能寫出 ARKit來。但是又不能一口吃個胖子,慢慢來,在網絡視頻教程中擼了視頻教學,斷斷續續看了半個多月,基本實現了
游戲主角??在不斷移動的平臺上跑,二級跳躍,掉出游戲場景打印結束。。。特此做一個小小學習總結,不辜負自己第一個小程序(雖然還有教和蘋果碰撞部分都是大同小異了,不再贅述)
一 資源圖片
資源圖片是從網友學習成果里面摘出來的,可以用到的圖如:??跑,跳,平臺,背景。
因為swift語言 一直在不斷完善更新,網絡教程也好,網友已經完成的項目也好,即使是完全扒代碼,也跑不起來,出現一堆錯誤,這時候靠自己學習Swift4.0 遵守當前的編譯規則語法等,還好,多研究揣摩也差不多弄出來了(注意:坐標系也變了,當前的坐標系是以屏幕中心點為0,0點)
二 項目的基本架構
2.1 創建一個新工程HFPanda -->Xcode-->File-->new --> project -->iOS Application-->Game-->命名HFPanda,語言Swift,游戲技術SpriteKit 即可
2.2 認識SpriteKit
(1)SpriteKit是在iOS7 SDK中Apple新加入的一個2D游戲引擎框架.SpriteKit展現出的是Apple將Xcode和iOS/Mac SDK打造成游戲引擎的野心,但是同時也確實與IDE有著更好的集成,減少了開發者的工作。
(2)Sprite 翻譯成精靈 。在游戲開發中,精靈指的是以圖像方式呈現在屏幕上的一個圖像。精靈可以是動態的可以移動,可以和用戶交互。也可以只是靜止的一個背景等。比如HFPanda項目中,熊貓就是一個精靈,每個移動的平臺部分也是精靈,前背景和遠處后背景 都是精靈。
2.3 創建swift類
(1)HFPanda.swift :熊貓類熊貓精靈是整個游戲主角,并有跑,跳,二級跳,滾的動作狀態和方法 和 熊貓物理實體參數和物理碰撞檢測的相關方法
(2)Platform.swift: 平臺類 。
要點:a 要知道一個完整的平臺段是由左中右 三部分精靈拼接而成的,根據中間部分精靈數量 控制整體平臺段的長度
b 平臺類作用是傳入所有的平臺精靈展現一個完整的平臺段整體 也需要設置物理實體參數和物理碰撞檢測的相關方法
//代碼示例:
func onCreatePlatform(spriteArray:[SKSpriteNode]) { //code }
(3)PlatformFactory.swift :平臺工廠類,用來創造隨機長度的平臺。平臺移動并產生新平臺。
以下說的是平臺對象(即完整的一個平臺)
要點:a 平臺是從左邊到右邊移動的,再配合背景,熊貓跑起來就像在一直往前跑(橫屏過來右邊??)
b 平臺移動方法根據傳進來speed,平臺整體全部精靈中心縱坐標不變,恒坐標 減去 speed ,就是往左邊移動 speed像素長度 就產生運動效果
c 從右邊到左邊移動的平臺總有移動完成的時候,當消失在屏幕中的平臺(當平臺的中心橫坐標小于游戲場景左邊邊界時即屏幕左邊邊界橫坐標),從尤其場景中移除,并從平臺隊列集合中出隊列
d 源源不斷產生的隨機平臺,要遵循主場景的ProtocolMainScence代理方法onGetDData,每次產生一個新平臺,要告訴主場景,當前創建完的平臺在游戲場景中的位置,方便主場景判斷何時產生新的平臺
(4)HFBackground.swift:背景類,里面有近背景和遠背景 。也需要設置物理實體參數和物理碰撞檢測的相關方法
要點:a 移動方法實施通過外部傳進來速度值供給背景 橫坐標從右邊到左邊移動 通過x坐標位移產生動畫效果,當背景精靈移動出屏幕后要瞬間歸位
b 術語:視差滾動技術“視差滾動(Parallax Scrolling)是指讓多層背景以不同的速度移動,形成立體的運動效果,帶來非常出色的視覺體驗。作為今年網頁設計的熱點趨勢,越來越多的網站應用了這項技術。”
(5)BitMaskType.swift:位運算標識類 ,用來做碰撞檢測標識等。每兩種二進制位或運算結果唯一,所以使用二進制枚舉
2.4 游戲主場景:GameScene.swift //系統場景
認識游戲場景中幾個方法
//系統方法: override func didMove(to view: SKView) { //當切換到這個場景視圖后后
//code:展示背景,平臺,熊貓, 并設置場景的物理碰撞相關內容屬性
} override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { //響應屏幕點擊時間的方法
//code:點擊屏幕觸發的就是??熊貓跳,二級跳
} override func update(_ currentTime: TimeInterval) { //每一幀執行一次的系統update方法
//code:背景移動,平臺是否需要新建?平臺移動
} //遵循SKPhysicsContactDelegate 協議代理方法 func didBegin(_ contact: SKPhysicsContact) { //物體之間碰撞就會執行beign代理方法
//code:精靈物體之間碰撞就會執行beign代理方法,這里有(??和平臺之間碰撞-->執行??跑)和(??和場景-->game over)
}
2.5 點擊了解??項目代碼:各種陌生方法,類,邏輯都有輔助說明
參考:
1 http://www.swiftv.cn/secure/course/hxbazkq4/learn?lectureId=hxbazkq40.91211870708502830.13575999299064279#lesson/hxbazkq40.91211870708502830.13575999299064279
2 https://github.com/jakciehoo/KongfuPanda
3 http://blog.csdn.net/jiang314/article/details/53130126
posted on 2018-03-14 16:25 ACM_Someone like you 閱讀(691) 評論(0) 收藏 舉報
浙公網安備 33010602011771號