日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS7

發(fā)布時間:2024/3/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS7 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

OS7 beta發(fā)布后,大部分開發(fā)者和用戶的注意力都集中在了iOS 7的全新UI交互設(shè)計(jì)界面上。一直負(fù)責(zé)硬件工業(yè)設(shè)計(jì)的Jony Ive首次全面負(fù)責(zé)蘋果的軟件和硬件設(shè)計(jì)工作,自然要把他自己的設(shè)計(jì)理念完整詮釋一番。加上和iOS之父Scott Forstall一直以來的不和,Jony對之前擬物化風(fēng)格的全面顛覆設(shè)計(jì)也是必然的結(jié)果。

? ??

如今iOS7 已經(jīng)在一番喧囂的或謾罵或驚嘆之后,人們逐漸開始接受了iOS 7的新設(shè)計(jì)風(fēng)格。其實(shí)iOS 7并非是簡單的copy windows8和android的flat設(shè)計(jì)風(fēng)格,而是將原來令人驚嘆的視覺效果從靜態(tài)的圖標(biāo)和界面悄然轉(zhuǎn)移到與用戶的互動之中。或許iOS 7的UI設(shè)計(jì)并沒有大家想的那么糟糕,以Jony的設(shè)計(jì)功底,相信只要他繼續(xù)呆在蘋果并負(fù)責(zé)設(shè)計(jì)工作,一定會讓iOS 的界面和交互設(shè)計(jì)走上一條全新的道路。

? ? ??

對于用戶來說,iOS 7的全新界面設(shè)計(jì)風(fēng)格就是一切。而對于開發(fā)者來說,iOS 7也增加和完善了不少新東西。由于目前iOS 7仍然是beta版本,很多東西都不是最終的,但還是可以從現(xiàn)有發(fā)布的工具和API中學(xué)到不少。

? ??

最近這幾天仔細(xì)閱讀了What’s New in iOS 7,iOS 7 for Developers, What’s New in Xcode等官方文檔,并觀看了WWDC 2013中有關(guān)iOS 7的大部分視頻,對于iOS 7有了初步的印象。

? ? ??

從個人了解的情況來看,除了全新升級的Xcode 5開發(fā)工具,對于iOS 7開發(fā)者來說需要重點(diǎn)關(guān)注的三個最大變化是:

?

1.iOS 7全新的UI 交互設(shè)計(jì),以及與之相關(guān)的API(UIKit Dynamics), Text Kit

相關(guān)的文檔有:

iOS Human Interface Guidelines:Designing for iOS 7?? ??(中文版:iOS 人機(jī)交互指南之UI設(shè)計(jì)基礎(chǔ):Designing for iOS 7

?

iOS 7 UI Transition Guide: Before You Start?? ?(中文版:iOS 7用戶界面過渡指南

?

WWDC 2013中的相關(guān)視頻有:

Advanced Techniques with UIKit Dynamics(Session 221),

Advanced Text Layouts and Effects with Text Kit (Session 220),

Best Practices for Great iOS UI Design(Session 225),

Building User Interfaces for iOS 7(Session 201),

Customizing Your App’s Appearance for iOS 7(Session 214),

Custom Transitions Using View Controllers(Session 218)

Exploring Scroll Views on iOS 7 (Session 217),

Getting Started with UIKit Dynamics(Session 206),

Implementing Engaging UI on iOS(Session 226),

Introducing Text Kit(Session 210),

Using Fonts with Text Kit(Session 223),

What’s New in iOS User Interface Design(Session 208),

?

細(xì)心的開發(fā)者可以看到在WWDC 2013中與iOS 7的UI設(shè)計(jì)相關(guān)的視頻是最多的,也足以看出蘋果對此的重視程度。

?

2、升級后的真正意義上的Multitasking多任務(wù)管理

WWDC 2013中的相關(guān)視頻是:

What’s New with Multitasking (Session 204)

What’s New in Foundation Networking(Session 705)

What’s New in Core Location

What’s New in State Restoration

Improving Performance and Energy Usage

Protecting Secrets with the Keychain

Energy Best Practices

Protecting your User’s Privacy

?

增強(qiáng)的Multitasking提供了三個非常有用的新特性

(1)Background Fetch(對一些社交類應(yīng)用非常有用)

(2) Remote Notifications(對閱讀聚合類應(yīng)用非常適合)

(3) Background Transfer Service(對一些社交照片分享類應(yīng)用很有用),和CFNetworking有關(guān)。還可以和自動判斷所在地區(qū)相結(jié)合,比如地圖類應(yīng)用,當(dāng)用戶進(jìn)入一個新的地理區(qū)域后自動下載相關(guān)地圖。即便用戶已經(jīng)關(guān)閉了該應(yīng)用,仍然有效。

?

3.游戲開發(fā)的新框架和新性能

這部分又包括全新添加的Sprite Kit Framework,全新添加的Game Controller Framework,以及增強(qiáng)的Game Center。

?

其中Sprite Kit Framework和Game Controller Framework凸顯了蘋果對于游戲市場的野心。Sprite Kit Framework可以幫助現(xiàn)有的iOS開發(fā)人員快速轉(zhuǎn)向游戲開發(fā),而Game Controller Framework則支持真正的硬件游戲控制器(手柄神馬的),為蘋果推出自己的專用游戲控制器和傳說中的iTV奠定了堅(jiān)實(shí)的基礎(chǔ)。蘋果甚至可以借此徹底搶占家用游戲主機(jī)的市場,相信Microsoft, SONY和Nintendo對蘋果的野心也是心知肚明的。

?

相關(guān)的蘋果官方開發(fā)文檔有:

Game Controller Programming Guide

Sprite Kit Programming Guide:About Sprite Kit

?

蘋果罕見的為Sprite Kit和Game Controller提供了一個非常完整的多人對戰(zhàn)(最多支持4人,支持真正的外接游戲手柄)示例項(xiàng)目以及代碼解讀文檔:

code: Explained Adventure: Introduction

代碼下載鏈接:(Adventure.zip

?

WWDC 2013中的相關(guān)視頻有:

Designing Games with Sprite Kit (Session 503),

Integrating with Game Controllers(Session 501),

Introduction to Sprite Kit(Session 502),

?

對于一般的iOS 應(yīng)用開發(fā)者來說,重點(diǎn)關(guān)注的就是1和2這兩大塊。而對于游戲開發(fā)者來說,特別是2D游戲開發(fā)者,不妨了解一下蘋果的這個全新游戲開發(fā)框架。

?

?

現(xiàn)狀

對于已經(jīng)在手機(jī)游戲開發(fā)市場浴血奮戰(zhàn)的開發(fā)者來說,目前最常用的幾款手機(jī)游戲開發(fā)引擎工具幾乎集中在cocos2d-iphone,cocos2d-x,unity 3d,adobe flash air, html5。其中cocos2d家族(在中國主要是cocos2d-x,在海外cocos2d-iphone用的更多些)開發(fā)的2D游戲幾乎占據(jù)了收入排行榜的80%以上,而unity3d也是當(dāng)仁不讓的3d 手機(jī)游戲開發(fā)引擎。少數(shù)資本雄厚的開發(fā)商用unreal等商用引擎,但算不上主流。國外還有少數(shù)開發(fā)者用corona, game salad等引擎或工具,但充其量也只是占據(jù)了少數(shù)的業(yè)余愛好者市場,更談不上主流。

?

cocos2d從2009年發(fā)布cocos2d-iphone到現(xiàn)在不過4年的時間,但卻伴隨著iOS和智能手機(jī)市場的崛起而迅速壯大。2011年才發(fā)布的cocos2d-x更是在短短兩年時間內(nèi)就成了2d手機(jī)游戲開發(fā)的首選引擎工具。

?

或許是蘋果在為即將發(fā)布的iTV和家用游戲機(jī)做最后的準(zhǔn)備,這次iOS 7的變化中,全新的Sprite Kit Framework和Game Controller Framework可謂是提供給游戲開發(fā)者的屠龍寶刀。

?

那么,同為2d游戲開發(fā)引擎工具的cocos2d和Sprite Kit,可謂是倚天屠龍,那么究竟那一柄利器會讓開發(fā)者更為高效的開發(fā)游戲呢?iOS 7 之后,究竟還有無必要繼續(xù)使用cocos2d?

?

在接下來的內(nèi)容中,本文將對Sprite Kit和cocos2d做一個簡單的對比,并提出自己的一些看法。

?

不過,在繼續(xù)之前,強(qiáng)烈推薦對Sprite Kit感興趣的開發(fā)者看看WWDC 2013中的相關(guān)視頻,以及官方的開發(fā)指南和示例項(xiàng)目代碼。

?

?

Sprite Kit 和cocos2d開發(fā)對比

這里假定看此文的朋友對cocos2d已經(jīng)有一定的了解,當(dāng)然,即便不懂cocos2d也不會看不懂,只是對于兩者的對比可能缺少感性的認(rèn)識。這里以cocos2d-iphone為例,考慮到cocos2d-x的主要特性都是從cocos2d-iphone移植的,就不另作特別說明了。

?

1.所支持的主要特性對比

作為一款被市場普遍接受的2d游戲開發(fā)引擎,cocos2d支持場景管理(scene),場景切換(transitions),精靈和精靈表單,動作,動畫和特效,菜單和菜單按鈕,內(nèi)置支持box2d(使用c++語言)和chipmunk(使用c語言)物理引擎,粒子特效,文本渲染,紋理圖集,瓷磚地圖,視差滾動,音效,暫停/恢復(fù),快速紋理,opengl es 1.1(cocos2d 1.x)和opengl es 2.0(cocos2d 2.x),等等。

?

而作為蘋果官方內(nèi)置的游戲開發(fā)框架,Sprite Kit幾乎支持cocos2d的所有主要特性,在物理引擎方面更是無需借助外力。

?

但就所支持的特性來說,兩者不分高下。

?

在仔細(xì)看了相關(guān)的文檔和視頻后,我甚至覺得蘋果是直接把cocos2d-iphone引擎維護(hù)團(tuán)隊(duì)的某位牛人挖走了,然后改頭換面弄了一個Sprite Kit。難怪cocos2d-iphone的主要作者Riq先生在觀看了Sprite Kit的演示視頻后油然而生一種“既生瑜何生亮”的感嘆。

?

?

2.安裝和配置對比

cocos2d 的安裝配置其實(shí)很簡單,只需要在Terminal中切換到所在的目錄,然后輸入一個命令行即可完成安裝。然后在Xcode中創(chuàng)建新項(xiàng)目選擇對應(yīng)的cocos2d或cocos2d-x模板即可。

?

但相比Sprite Kit來說,要借助Terminal和命令行命令的安裝方式還是稍遜風(fēng)騷。Sprite Kit作為內(nèi)置的游戲開發(fā)框架無需安裝。而對于新的游戲項(xiàng)目,開發(fā)者只需要在Xcode 5中選擇SpriteKit Game模板即可。需要注意的是,SpriteKit Game模板默認(rèn)是采用storyboard的。

?

3.幫助文檔對比

cocos2d的幫助文檔可以借助doxygen整合到Xcode中,但通常我個人偏好使用Dash來查找所需API的幫助文檔。

?

Sprite Kit在這方面又贏了,因?yàn)槭莾?nèi)置的framework,可以直接在Xcode的documentation中查看幫助文檔,而且Xcode 5的幫助文檔非常便于使用,非常人性化。

?

4.應(yīng)用啟動流程對比

在使用cocos2d開發(fā)的游戲中,啟動流程如下:

main.m --->AppDelegate的didFinishLaunchingWithOptions方法--->IntroLayer的onEnter方法--->特定游戲的首界面或加載界面

?

在使用Sprite Kit開發(fā)的游戲中,啟動流程如下:

main.m---> XXXAppDelegate(XXX為項(xiàng)目名稱)--->XXXViewController的viewDidLoad方法--->特定游戲的首界面

?

5.核心類對比

在進(jìn)行對比之前,先對cocos2d的核心類做一下簡單的回顧,這部分也可以完全跳過。

?

cocos2d的核心類包括CCNode,CCScene,CCLayer三個沒有具體視覺呈現(xiàn)的抽象類,以及CCTexture紋理類,CCSprite精靈類,CCLabel文本標(biāo)簽,CCMenu菜單等。

?

(1)CCNode

CCNode是Cocos2d中最為重要的類,也可以說是整個cocos2d的基礎(chǔ),它是所有節(jié)點(diǎn)的基類,它是一個抽象類,沒有視覺表現(xiàn),定義了所有節(jié)點(diǎn)都通用的屬性和方法。

?

在Cocos2D中,所有要繪制到屏幕的對象,或是自身包含要繪制到屏幕中的對象,都屬于CCNode類。最重要的幾個CCNode類分別是CCScene、CCLayer、CCSprite、CCMenu。CCNode的主要作用:

a.包含其他的CCNode節(jié)點(diǎn)(addChild、getChildByTag、removeChild等方法)

b.通過定時器預(yù)定消息(schedule、unschedule等方法)

c.執(zhí)行動作(runAction、stopAction等方法)

?

CCNode有非常多有用的屬性,比如錨點(diǎn)(anchorPoint),camera(游戲視角),children(子節(jié)點(diǎn)數(shù)組),contentSize(節(jié)點(diǎn)大小),position(位置),rotation(旋轉(zhuǎn)角度),scale(縮放比例,又分為scale,scaleX,scaleY),skew(變形角度,分為skewX和skewY),tag(標(biāo)識值),userData(自定義的數(shù)據(jù)指針對象),visible(是否可見),zOrder(視覺顯示的z順序值),等等。有些屬性不太常用就不在這里一一列出,大家可以參考官方文檔或dash里面的幫助文檔。

?

CCNode主要實(shí)現(xiàn)三大類方法,分別是對子節(jié)點(diǎn)的處理,使用定時器預(yù)定消息,以及執(zhí)行動作。

?

其中對子節(jié)點(diǎn)的處理又包括添加、獲取和刪除子節(jié)點(diǎn)。

?

其中執(zhí)行動作的方法包括運(yùn)行某個特定的動作,停止動作,停止某個特定動作,停止動作列表中的某個特定動作,獲取動作列表中的某個特定動作,獲取動作的數(shù)量等。

?

其中預(yù)定消息主要是update方法,可以設(shè)置特定的時間間隔,或默認(rèn)按每幀來調(diào)用。

?

除了以上方法外,CCNode還支持坐標(biāo)轉(zhuǎn)換,視圖-矩陣轉(zhuǎn)換,初始化節(jié)點(diǎn)等多個方法,可謂威力無比。

?

(2)CCScene

CCScene是CCNode的子類,和CCNode一樣,也是一個抽象類。事實(shí)上,CCScene和CCNode幾乎完全相同,唯一差異就在于CCScene的錨點(diǎn)位置默認(rèn)在屏幕中心。如果打開模板中CCScene.h文件,會發(fā)現(xiàn)其中只說明CCScene繼承自CCNode,并沒有任何其他內(nèi)容。

?

當(dāng)前版本的Cocos2D-iPhone中,CCScene類基本上沒有附加任何邏輯機(jī)制和特殊功能。通常建議將CCScene作為所有其他節(jié)點(diǎn)的父節(jié)點(diǎn),看作CCLayer(層)對象的一個容器。

?

需要說明的是,通常CCScene的子節(jié)點(diǎn)都直接繼承自CCLayer。CCLayer包含各個游戲?qū)ο蟆R驗(yàn)榇蠖鄶?shù)情況下場景對象本身不包含任何游戲相關(guān)的代碼,而且很少被子類化,所以它一般在CCLayer對象里通過+(id)scene靜態(tài)方法來創(chuàng)建。

?

CCScene場景類支持多種場景切換效果。

?

(3)CCLayer

一個CCLayer是屏幕上可繪制的區(qū)域,可以是半透明的,這樣就可以看到CCScene下面的其他層。在游戲編程的過程中,開發(fā)者大部分時間都需要跟層打交道。

?

CCLayer直接繼承自CCNode,作為精靈節(jié)點(diǎn)和其他節(jié)點(diǎn)的容器,同時可以接收觸摸輸入和加速計(jì)輸入的信息,前提是上述接收功能已被啟用。

?

CCLayer類的作用主要是三個:作為其它子節(jié)點(diǎn)的容器和組織者,接收觸摸事件,接收加速計(jì)事件。CCLayerColor是一個透明的、可以按照RGB 設(shè)置填充顏色的層,是實(shí)現(xiàn)CCRGBAProtocol協(xié)議的CCLayer子類,繼承了CCNode所有屬性和方法,同時還可以接收觸摸事件和加速計(jì)事件。它的特有屬性包括color(ccColor3B類型的色彩),opacity(Glubyte類型的透明度),blendFunc(ccBlendFunc)類型的混合模式。

?

(4)CCMenu菜單

CCMenu繼承自CCLayer,是一個菜單管理選擇畫面層,該畫面以Menu對象為集合類,由MenuItem類實(shí)例組成各種按鈕。CCMenu類提供的方法主要用來按橫向、豎向或者多行列排序展示MenueItem的類實(shí)例。

?

(5)CCTexture紋理

在游戲運(yùn)行中,所有圖像文件(PNG、PVR)都被加載成GPU可以理解的OpenGL ES紋理,而精靈則對應(yīng)著這些紋理圖。Cocos2D內(nèi)置一個紋理緩存管理器(CCTextureCache)來保持這些紋理圖。

?

在cocos2d中,和紋理相關(guān)的類包括CCTexture2D,CCTextureCache和CCTextureAtlas。

?

在Cocos2D中,使用CCTexture2D(紋理)從圖片、文本或源數(shù)據(jù)中創(chuàng)建OpenGL 2D紋理,所創(chuàng)建的紋理對象使用2的乘方來填充。

?

CCTextureCache(紋理緩存)作為單例使用,用于加載和管理紋理。一旦紋理加載完成,下次使用時可使用它返回之前加載的紋理,從而減少對GPU和CPU內(nèi)存的占用。

?

使用CCTextureAtlas(紋理圖集)來實(shí)現(xiàn)紋理圖集。紋理圖文件可以是PVRTC、PNG或任何Texture2D所支持的文件類型。可以對紋理圖集的矩形進(jìn)行實(shí)時的更新,添加,刪除或重排序。

?

(6)CCSprite精靈

CCSprite是Cocos2D游戲開發(fā)中最常用的類,也是cocos2d引擎的靈魂。

?

在游戲開發(fā)中,經(jīng)常會遇到精靈(sprite)這個術(shù)語。精靈是一個圖像,可以在屏幕上獨(dú)立地移動。一個精靈可能是玩家角色、敵人,或者是大的背景圖像。一般情況下,精靈來自于開發(fā)者所準(zhǔn)備的PNG或PVRTC圖像。一旦圖像載入內(nèi)存,精靈將被轉(zhuǎn)換成紋理圖,從而被iPhone GPU用于在屏幕上渲染。

?

生成精靈最簡單的方法是把圖片文件加載進(jìn)CCTexture2D紋理,然后將它賦給精靈。精靈可以接受其他精靈作為子節(jié)點(diǎn)。CCSprite默認(rèn)錨點(diǎn)位置是(0.5,0.5),也就是節(jié)點(diǎn)的幾何中心。

?

如果一個精靈的父類是標(biāo)準(zhǔn)CCNode節(jié)點(diǎn),那么它和其他CCNode的屬性和方法沒有太大區(qū)別。如果一個精靈的父類或任何一個祖先類是CCSpriteBatchNode,那么具備的特性包括:更快地紋理渲染、不支持Camera、不支持GridBase、不能單獨(dú)設(shè)置Alias/Antialias屬性、不能單獨(dú)設(shè)置混合模式、不支持視差滾動。

?

(7)CCSpriteBatchNode精靈表單和CCSpriteFrame精靈幀

如果仔細(xì)看看CCSprite相關(guān)代碼(CCSprite.h文件),會發(fā)現(xiàn)在游戲的每一幀都會調(diào)用-(void)draw方法。在draw方法中,每次在屏幕中繪制一個精靈時都會調(diào)用真實(shí)的OpenGL ES命令(gl為前綴的方法,詳見gl.h)。對于每個精靈,OpenGL ES都需要將紋理圖綁定在這個CCSprite上,然后將其繪制在屏幕上(稱為渲染)。

?

在屏幕上真實(shí)顯示圖像的像素前,還有一件事要做:iOS提供的OpenGL ES驅(qū)動將把OpenGL ES的命令轉(zhuǎn)換成GPU可以理解的硬件編碼,從而讓GPU顯示圖像。作為一個游戲開發(fā)者,無需了解更多驅(qū)動細(xì)節(jié),只需明白一點(diǎn),每次調(diào)用OpenGL ES的命令都將耗費(fèi)OpenGL ES驅(qū)動的CPU時鐘。如果盡可能地減少OpenGL ES的調(diào)用,游戲的運(yùn)行將更為順暢。

?

要實(shí)現(xiàn)這一點(diǎn),就需要讓OpenGL ES一次性處理所有紋理圖,而使用CCSpriteBatchNode和紋理圖集就能實(shí)現(xiàn)這一目的。

在使用精靈表單時,CCSpriteBatchNode、CCSpriteFrame和CCSpriteFrameCache常常配合使用。

?

(8)CCDirector導(dǎo)演

CCDirector(導(dǎo)演類)是Cocos2D游戲引擎的核心。CCDirector是一個單例,它保存Cocos2D的全局配置設(shè)定,同時管理Cocos2D場景。主要作用如下:

a.訪問和改變場景;

b.訪問Cocos2D的配置細(xì)節(jié);

c.訪問視圖(OpenGL、UIView、UIWindow);

d.暫停、恢復(fù)和結(jié)束游戲;

e.在UIKit和OpenGL之間轉(zhuǎn)換坐標(biāo)。

?

(9)CCAction動作

如果說CCSprite是cocos2d的靈魂,那么CCAction則是cocos2d絢麗多彩的外表。

?

任何一個游戲中的角色都不會在原地一動不動,使用動作可以讓玩家更好地產(chǎn)生游戲中的參與感,并沉浸其中。

?

可以把節(jié)點(diǎn)動作想象成給所有CCNode節(jié)點(diǎn)對象下達(dá)的命令。這些動作可以修改節(jié)點(diǎn)對象的各種屬性,如position(位置)、rotation(旋轉(zhuǎn))、scale(比例)等。如果這些屬性是經(jīng)過一段時間之后修改的,屬于CCActionInterval(區(qū)間動作),否則屬于CCActionInstant(瞬時動作)。

?

cocos2d默認(rèn)提供了多種不同的基本動作,同時開發(fā)者還可以使用組合動作,ease動作,延遲動作,方法回調(diào)動作,塊語句調(diào)用動作,反轉(zhuǎn)動作,特殊動作來讓cococs2d的游戲世界豐富多彩。

?

此外,cocos2d還提供了20多種特效,特效也是動作,只是其原理是利用cocos2d的網(wǎng)格來生成動作。特效會調(diào)整節(jié)點(diǎn)的網(wǎng)格屬性。網(wǎng)格是節(jié)點(diǎn)的一種新屬性,使用網(wǎng)格可以將節(jié)點(diǎn)劃分為更小的方塊或瓦片,通過移動組成每個方塊的頂點(diǎn)調(diào)整節(jié)點(diǎn)的屬性。

?

在cocos2d中還提供了用于創(chuàng)建動畫的另一種特殊動作,CCAnimate、CCAnimation和CCAnimationCache這三個類。在Cocos2D中實(shí)現(xiàn)動畫其實(shí)很簡單,只需從精靈表單(CCSpriteBatchNode)中獲取一系列圖片,按照特定的順序排列,最后在精靈對象上執(zhí)行特定的動作。

?

(10)CCLabel文本渲染系統(tǒng)

cocos2d中提供了三種用于文本渲染的類,CCLabelTTF,CCLabelAtlas,CCLabelBMFont.

在使用Cocos2D開發(fā)的項(xiàng)目中,經(jīng)常用CCLabelTTF類顯示一些靜態(tài)的標(biāo)簽和文本。CCLabelTTF類繼承自CCSprite,主要用于渲染文本標(biāo)簽。使用CCLabelTTF類可以用很少的代碼將文本嵌入到游戲之中。

雖然使用CCLabelTTF顯示靜態(tài)標(biāo)簽文本比較方便,但其渲染速度相對較慢,且通常用于顯示純文本。為了提高文本渲染速度,同時為在項(xiàng)目中顯示文本提供更大的靈活性,Cocos2D提供了CCLabelTTF的替代類CCLabelAtlas。

CCLabelBMFont類支持不同寬度的字符,并且有很多第三方的編輯器支持,比CCLabelAtlas更靈活。

?

(11)CCTileMap瓷磚地圖(瓦片地圖)

瓷磚地圖(Tile Map)是圖形界面程序設(shè)計(jì)和游戲設(shè)計(jì)領(lǐng)域中常用的技術(shù),也有人將其翻譯成“瓦片地圖”。其原理是用小的瓷磚(Tile)拼接出一張大的地圖。這樣做的好處很多,最明顯的當(dāng)然就是節(jié)省內(nèi)存,大大提高OpenGL的渲染繪圖性能。很多游戲開發(fā)引擎都內(nèi)置了對瓷磚地圖的支持,Cocos2D當(dāng)然也不會例外。

?

瓷磚地圖其實(shí)是二維數(shù)組,數(shù)組中的每個元素都包含地圖中的某個特定區(qū)域信息。此類信息包括該區(qū)域中所顯示的圖像、瓷磚的碰撞屬性等。

?

對于創(chuàng)建游戲中的大型關(guān)卡(特別是RPG角色扮演類游戲)瓷磚地圖非常有用。即使游戲不是很大,如果為每個關(guān)卡創(chuàng)建不同的滾動背景,也需要用到瓷磚地圖。

?

(12)CCParticleSystem(粒子系統(tǒng)類)

粒子系統(tǒng)是計(jì)算機(jī)圖形學(xué)中用來模擬一些特定效果的技術(shù),特別是一些模糊的現(xiàn)象。這些現(xiàn)象用傳統(tǒng)的渲染技術(shù)難以實(shí)現(xiàn)。使用粒子效果可以模擬的現(xiàn)象有火、爆炸、煙、水流、火花、落葉、云、霧、雪、塵、流星尾跡或發(fā)光軌跡這樣的模糊而又抽象的視覺效果。

?

在Cocos2D中提供了幾個與創(chuàng)建和編輯粒子系統(tǒng)相關(guān)的類。了解并掌握了這些類之后,就可以在游戲中輕松的創(chuàng)建和編譯粒子系統(tǒng)。其中主要是CCParticleSystem、CCParticleSystemQuad和CCParticleBatchNode類。此外cocos2d還內(nèi)置了多種粒子特效。

?

以上概念對于cocos2d游戲開發(fā)者來說應(yīng)該是非常熟悉的了,這里再次歸納一下是為了便于和Sprite Kit進(jìn)行全面的對比。

?

實(shí)際上,以上的核心類就是一款cocos2d游戲的核心組織元素。

?

有了這十一大核心類,可以充分發(fā)揮開發(fā)者的創(chuàng)意和想象力,開發(fā)出令人唏噓不已的游戲體驗(yàn)。事實(shí)上,cocos2d在過去4年內(nèi)的巨大成功也要?dú)w功于這十一種利器。

?

那么,對比已經(jīng)相對比較完善的cocos2d,Sprite Kit又靠什么來取勝呢?

?

?

接下來讓我們一起來了解下Sprite Kit。

根據(jù)官方的文檔和視頻,Sprite Kit由三大部分組成,分別是Scene(場景),Actions(動作)和Physics(物理)。Scene當(dāng)然是游戲場景及其中的角色,背景等;Actions則負(fù)責(zé)處理游戲角色的動作動畫特效音效等,Physics則專門負(fù)責(zé)物理模擬。僅從這一點(diǎn)來看,Sprite Kit和cocos2d的本質(zhì)是相似的。

?

當(dāng)我們在Xcode中查看SpriteKit.framework的Headers時,會發(fā)現(xiàn)其中的類并不多,只有21個.h文件,打開SpriteKit.h就可以看到其中的代碼如下:

#import

#import

#import

#import

#import

#import

#import

#import

#import

?

#import

#import

?

#import

#import

?

#import

?

#import

#import

#import

?

再加上一個SpriteKitBase.h和SpriteKit.h,一共只有21個.h文件。而cocos2d中有多少個.h文件呢?我大概數(shù)了下,至少超過250個~

?

這個該如何比較呢?既可以說cocos2d功能全面,也可以說Sprite Kit設(shè)計(jì)簡潔,秉承了蘋果一貫的風(fēng)格。

?

好了,現(xiàn)在可以來看看Sprite Kit的核心類有哪些:

?

(1)SKNode vs CCNode

SKNode對于Sprite Kit的重要性如同CCNode對于cocos2d的意義一樣。cocos2d的游戲場景可以用場景節(jié)點(diǎn)圖的形式來展現(xiàn),而節(jié)點(diǎn)同樣是Sprite Kit游戲場景的根基。

?

Sprite Kit游戲中的所有視覺元素均使用SKNode的子類來繪制。

?

SKNode的幾大子類包括:

SKSpriteNode(對應(yīng)CCSprite,用于繪制精靈紋理);

SKVideoNode(在cocos2d中無對應(yīng)類,用于播放視頻);

SKLabelNode(對應(yīng)CCLabel,用于渲染文本);

SKShapeNode(在cocos2d中無對應(yīng)類,用于渲染基于Core Graphics路徑的形狀);

SKEmitterNode(對應(yīng)CCParticleSystem,用于創(chuàng)建和渲染粒子系統(tǒng));

SKCropNode(無對應(yīng)類,用于使用遮罩來裁剪子節(jié)點(diǎn));

SKEffectNode(無對應(yīng)類,用于在子節(jié)點(diǎn)上使用Core Image濾鏡)。

?

類似cocos2d,SKNode也是用節(jié)點(diǎn)樹的形式來組織的,這一點(diǎn)和iOS的視圖層級也有相似之處。通常情況下,在一個游戲場景中,SKScene(場景節(jié)點(diǎn))將作為根節(jié)點(diǎn)存在,而其它的內(nèi)容節(jié)點(diǎn)都是其子節(jié)點(diǎn)。場景節(jié)點(diǎn)將負(fù)責(zé)運(yùn)行一個動畫循環(huán),從而來處理其它子節(jié)點(diǎn)的動作,模擬物理世界,并將節(jié)點(diǎn)數(shù)中的內(nèi)容渲染到屏幕上。

?

節(jié)點(diǎn)樹中的每一個節(jié)點(diǎn)都為其子節(jié)點(diǎn)提供了一套坐標(biāo)體系。當(dāng)我們將某個子節(jié)點(diǎn)添加到節(jié)點(diǎn)樹中時,可以通過設(shè)置其position和zPosition屬性將其放置在父節(jié)點(diǎn)的坐標(biāo)體系中。可以通過xScale,yScale和zRotation等屬性來縮放和旋轉(zhuǎn)節(jié)點(diǎn)。當(dāng)某個節(jié)點(diǎn)的坐標(biāo)體系被縮放或旋轉(zhuǎn)時,其自身內(nèi)容和所有子節(jié)點(diǎn)的內(nèi)容也會發(fā)生同樣的變化。

?

類似CCNode,SKNode自身是個抽象類,沒有具體的視覺呈現(xiàn)。但SKNode的子類則可以分別用于繪制不同的視覺內(nèi)容。

?

SKNode的frame屬性可以獲得節(jié)點(diǎn)的視覺內(nèi)容的邊框,通過調(diào)用calculateAccumulatedFrame方法可以獲取包含該節(jié)點(diǎn)和其所有子節(jié)點(diǎn)的邊框。

?

節(jié)點(diǎn)樹上的所有節(jié)點(diǎn)都可以運(yùn)行動作,從而可以產(chǎn)生動畫和動作效果,添加或刪除節(jié)點(diǎn),播放音效或其它特定任務(wù)。在Sprite Kit中,動作(action)的重要性尤勝于cocos2d。

?

SKNode還有其它一些屬性,比如設(shè)置透明度的alpha屬性,設(shè)置是否顯示的hidden屬性等。這里就不一一列舉了,開發(fā)者可以參考蘋果官方文檔了解更詳細(xì)的信息。

?

接下來說說SKNode和CCNode不太一樣的地方。在cocos2d中,有專門的CCLayer類用于接收觸摸事件或加速計(jì)事件,從而處理用戶交互。

?

但在Sprite Kit中并不存在一個專門的Layer類,所有的SKNode節(jié)點(diǎn)都可以對屏幕上的用戶交互做出直接響應(yīng),這一點(diǎn)相對cocos2d實(shí)在是個大大的改進(jìn)。我們可以轉(zhuǎn)換坐標(biāo)體系,根據(jù)觸摸測試(點(diǎn)擊測試)來判斷用戶的觸摸點(diǎn)在哪個節(jié)點(diǎn)上。同時我們還可以對節(jié)點(diǎn)樹中的節(jié)點(diǎn)進(jìn)行交叉測試,從而來判斷它們的物理區(qū)域是否重疊。當(dāng)然,cococs2d中也是完全可以實(shí)現(xiàn)這一點(diǎn)的,只是多了一個中間步驟而已。

?

如果我們來仔細(xì)看看SKNode.h的源代碼,會發(fā)現(xiàn)SKNode繼承自UIResponder,并遵循NSCopying和NSCoding協(xié)議。而查看CCNode.h的源代碼,會發(fā)現(xiàn)CCNode只是簡單的繼承自NSObject,不像SKNode這樣一出生就肩負(fù)重任。

?

正因?yàn)镾KNode繼承自UIResponder,所以所有的SKNode節(jié)點(diǎn)其實(shí)都可以直接對用戶交互作為直接響應(yīng),比起cocos2d利用CCLayer來處理交互的方式要直接一些。

?

另外,因?yàn)镾KNode要遵循NSCopying和NSCoding協(xié)議,所以在自行創(chuàng)建SKNode的子類時,如果要給該類添加要archive的屬性,就必須實(shí)現(xiàn)NSCoding協(xié)議。具體可以參考(xcdoc://ios/documentation/Cocoa/Conceptual/Archiving/Archiving.html

?

(2)SKView vs CCGLView/CCDirector

SKView繼承自UIView(如果是Mac應(yīng)用則繼承自NSView,不過這里默認(rèn)都是iOS應(yīng)用,就不再贅述了)。

?

我們都知道在cocos2d中使用CCGLView,而CCGLView本身又繼承自UIView,所以殊途同歸。當(dāng)然,cocos2d中的CCGLView是將OpenGL場景渲染進(jìn)EAGL中。至于具體的細(xì)節(jié),如果不是引擎的開發(fā)者,或者對OpenGL不感冒,也沒必要深入研究。

?

Sprite Kit中的SKView類比cocos2d中的CCGLView要簡單的多,它的主要作用就是作為視圖容器來顯示Sprite Kit的內(nèi)容。而這個內(nèi)容則是由SKScene提供。

?

SKView的很多作用類似于cocos2d中的CCDirector導(dǎo)演類。

?

通過調(diào)用SKView的prensentScene:方法就可以在視圖中呈現(xiàn)游戲場景的內(nèi)容。

?

通過調(diào)用presentScene:transition:方法則會以某種特定的場景切換效果從當(dāng)前場景切換到新的場景。

?

當(dāng)游戲場景被顯示后,將會在場景模擬(場景中的內(nèi)容動畫)和內(nèi)容渲染之間來回切換狀態(tài)。我們可以通過設(shè)置該類的paused屬性來暫停游戲場景。

?

此外,SKView還可以使用textureFromNode方法從場景內(nèi)容中獲取紋理圖,使用Core Animation來同步渲染精靈。

?

SKView可以設(shè)置是否顯示游戲的相關(guān)測試信息(showsFPS-游戲幀速,showsDrawCount-繪制數(shù)量,showsNodeCount-節(jié)點(diǎn)數(shù)量)。

SKView還提供了轉(zhuǎn)換視圖和游戲場景坐標(biāo)的方法。

?

當(dāng)然,如果我們對比SKView和CCDirector的屬性和方法,會發(fā)現(xiàn)CCDirector所提供的功能更全面更強(qiáng)大,但也有些過于追求大而全的感覺。而SKView一如蘋果一貫的產(chǎn)品設(shè)計(jì)風(fēng)格,只提供最核心的功能,對次要功能則寧可棄之不用。好處是因?yàn)榉椒ê蛯傩暂^少,很容易掌握,而不好的地方當(dāng)然就是功能沒有CCDirector那么全面強(qiáng)大了。

?

在XXXViewController.m的viewDidLoad方法中,配置SKView的代碼非常簡潔明了:

  • //?Configure?the?view.?
  • ??SKView?*?skView?=?(SKView?*)self.view;?
  • ??skView.showsFPS?=?YES;?
  • ??skView.showsNodeCount?=?YES;?
  • ?

    而緊接著就是創(chuàng)建和配置游戲場景的代碼

    ?

    (3)SKScene vs CCScene

    與cocos2d中的CCScene類似,Sprite Kit中的SKScene更多起到一個容器的作用,但比起CCScene,SKScene的任務(wù)更多一些。

    ?

    首先,SKScene是一個抽象類,因此在實(shí)際的項(xiàng)目中必須創(chuàng)建該類的子類。游戲的主要內(nèi)容和邏輯都會在子類中運(yùn)行。

    SKScene的任務(wù)包括:

    a.調(diào)用update:方法

    b.在其子節(jié)點(diǎn)上執(zhí)行動作;

    c.調(diào)用didEvaluateActions方法;

    d.對場景中的物體執(zhí)行物理模擬計(jì)算;

    d.調(diào)用didSimulatePhysics方法。

    ?

    說到這里,就不得不說一下Sprite Kit游戲的循環(huán)。

    ?


    ?

    進(jìn)入游戲后,由SKView負(fù)責(zé)渲染游戲場景,在游戲的每一幀,首先在update:方法里面更新游戲中角色的信息,然后由SKScene評估并執(zhí)行這些動作,接下來調(diào)用didEvaluateActions方法,再然后由SKScene模擬物理世界的變化,最后再調(diào)用didSimulatePhysics方法。然后再次由SKView渲染游戲場景,重新開始下一次的循環(huán)。

    ?

    與cocos2d相比,這樣的游戲循環(huán)邏輯更為嚴(yán)密清晰,初學(xué)者可能也更容易理解。

    ?

    (4)SKSpriteNode/SKSprite vs CCSprite

    SKSpriteNode的重要性從它的名字就可以看出來,沒有Sprite,哪來的Sprite Kit?

    ?

    不過與cocos2d相比,SKSpriteNode的作用更加純粹,它只是用來繪制精靈紋理。而在cocos2d中,連CCLabel文本也是CCSprite的子類。

    比cocos2d方便的是,Sprite Kit中提供了多種與SKSpriteNode具備同等地位的節(jié)點(diǎn)。

    ?

    比如專門用于播放視頻的SKVideoNode,cocos2d里面沒有類似的類;

    ?

    專門用于渲染文本的SKLabelNode,在cocos2d中使用CCSprite的子類CCLabelTTF等;

    ?

    用于根據(jù)Core Graphics 路徑來渲染抽象形狀的SKShapeNode,想來用于制作涂鴉類的游戲自然是絕佳的,可惜cocos2d中貌似沒有類似的類;

    ?

    用于創(chuàng)建粒子效果的SKEmitterNode,在Cocos2d中有與之對應(yīng)的類CCParticleSystem:

    ?

    使用遮罩來裁剪子節(jié)點(diǎn)的SKCropNode,在cocos2d中貌似沒有對應(yīng)的類;

    ?

    在子節(jié)點(diǎn)上使用Core Image 濾鏡效果的SKEffectNode,在cocos2d中貌似沒有對應(yīng)的類。

    ?

    因?yàn)檫@幾個類在Sprite Kit中與SKSpriteNode處于同一級別,這里就一并比較了,后面不再重復(fù)。

    ?

    (5)SKTexture vs CCTexture2D

    SKTexture的作用與cocos2d中的CCTexture2D是類似的,用于創(chuàng)建可以被Sprite Kit對象(通常是SKSpriteNode對象)重用的紋理圖像。使用紋理可以讓Sprite Kit對精靈的渲染更加高效。

    ?

    我們可以從不同的源中初始化紋理,比如bundle中的圖片文件,core image filters, Quartz 2D圖形,甚至是原始像素?cái)?shù)據(jù)。在Sprite Kit中,可以使用SKTextureAtlas來創(chuàng)建紋理圖集。

    ?

    需要注意的是,在cocos2d中有CCSpriteBatchNode精靈表單,但Sprite Kit中只有SKTextureAtlas,兩者的作用是類似的,都是使用單次OpenGL ES命令調(diào)用替代重復(fù)的OpenGL ES命令。

    ?

    (6) SKAction vs CCAction

    SKAction在Sprite Kit中的作用非常重要,和CCAction類似,同樣用于創(chuàng)建節(jié)點(diǎn)動作。合理使用動作(actions)可以讓游戲世界更加豐富多彩,靈活多變,充滿吸引力。

    ?

    使用SKAction可以更改節(jié)點(diǎn)的多個屬性,如位置,旋轉(zhuǎn)或縮放等。部分動作只能用于SKSpriteNode,比如更改精靈的色彩或紋理屬性。

    ?

    此外,Sprite Kit中允許創(chuàng)建三種復(fù)雜的動作,可以將其它動作作為子動作,分別是序列動作,組合動作和重復(fù)動作。在Sprite Kit中,序列動作,組合動作和重復(fù)動作都是可以嵌套的。

    ?

    需要注意的是,開發(fā)者不能直接創(chuàng)建SKAction的子類,而是直接對目標(biāo)對象調(diào)用方法或執(zhí)行塊語句。

    ?

    我們都知道cocos2d中提供了多個CCAction的子類,但在Sprite Kit中只有一個SKAction,且不允許創(chuàng)建其子類。

    ?

    總的來說,從創(chuàng)建動作的角度來看,SKAction和CCAction可以達(dá)到完全相同的效果。

    ?

    (7)SKPhysicsBody/SKPhysicsContact/SKPhysicsJoint/SKPhysicsWorld ?vs Box2d/chipmunk

    大家都知道,cocos2d并沒有自己的物理引擎,而是內(nèi)置了box2d或chipmunk兩個第三方物理引擎。而box2d采用c++語言開發(fā),chipmunk采用c語言開發(fā),對iOS開發(fā)者來說多少是個麻煩事。

    ?

    從這個角度來看,Sprite Kit可謂直接勝出。SKPhysics相關(guān)類非常簡潔明了,原生Objective-C,無論從配置到使用都很簡單。

    ?

    關(guān)于這部分,可以參考蘋果官方的Adventure游戲,這里也不再多說。

    ?

    比較到這里,基本上已經(jīng)涵蓋了Sprite Kit絕大多數(shù)的核心類。感覺Sprite Kit的設(shè)計(jì)非常清晰簡潔,而cocos2d由于屬于開源項(xiàng)目,從結(jié)構(gòu)上來說稍顯復(fù)雜,但因?yàn)楸姸嚅_發(fā)者的反饋和貢獻(xiàn),功能卻比Sprite Kit要豐富很多。


    (8)AV Foundation vs CocosDenshion

    在cocos2d中使用cocosDenshion來播放游戲的音效和背景音樂,只需一行代碼就可以搞定一切。

    在Sprite Kit中需要借助AV Foundation的幫助,但功能顯然要強(qiáng)大很多。

    ?

    6.工具對比

    用過cocos2d開發(fā)游戲的朋友都知道有不少第三方的開發(fā)工具對其進(jìn)行支持,這里也簡單對比一下。

    ?

    (1)創(chuàng)建紋理圖集

    在cocos2d中常用Zwoptex或者Texture Packer,非常方便,特別是Texture Packer,可惜是付費(fèi)的。

    ?

    但如果用了Sprite Kit之后,就會發(fā)現(xiàn)在Xcode 5中創(chuàng)建紋理圖集更方便,無需任何第三方工具。具體的操作可以參考官方視頻。

    ?

    (2) 創(chuàng)建瓦片(瓷磚)地圖

    在cocos2d中通常使用Tiled Map或其它第三方工具。

    ?

    在Sprite Kit中貌似沒有內(nèi)置的創(chuàng)建工具。

    ?

    (3)創(chuàng)建字體

    在cocos2d中可以使用Hiero等第三方工具。

    ?

    使用Sprite Kit開發(fā)則可以直接利用iOS 7中最新的Text Kit,顯然更為強(qiáng)大。

    ?

    (4)創(chuàng)建粒子效果

    在cocos2d中可以使用Particle Designer等第三方工具,很直觀,很強(qiáng)大。

    ?

    在Sprite Kit中則可以直接利用Xcode 5內(nèi)置的粒子編輯器,同樣非常強(qiáng)大。

    ?

    (5)創(chuàng)建游戲界面

    在cocos2d中可以使用CocosBuilder等第三方工具,目前仍然在完善中。

    ?

    在Sprite Kit中則可以直接借助Xcode 5中的Interface Builder,很直接。

    ?

    顯然,如果使用cocos2d需要大量借助第三方的開發(fā)工具,而使用Sprite Kit則可以直接利用Xcode 5和iOS 7的諸多新特性,無需學(xué)習(xí)第三方工具。

    ?

    ?

    Sprite Kit和cocos2d對比小結(jié)

    相信在看了以上的比較之后(再次建議看看WWDC 2013官方視頻和相關(guān)的官方文檔),大家對Sprite Kit已經(jīng)有了初步的認(rèn)識。

    ?

    那么,究竟Sprite Kit能否替代cocos2d成為2d手機(jī)游戲開發(fā)的首選工具呢?

    ?

    在作出自己的結(jié)論之間,先用表格的方式來做一個小小的總結(jié)。


    整理完這個表格之后,下面就是我個人的結(jié)論:

    ?

    a.Sprite Kit作為iOS 7 內(nèi)置的游戲開發(fā)工具,短期內(nèi)不太可能替代cocos2d-x,但很有可能完全替代cocos2d-iphone。

    ?

    b.如果要支持跨平臺開發(fā),那么2D游戲引擎還是首選cocos2d-x,沒有其它。按照蘋果的風(fēng)格,Sprite Kit這么霸氣的工具是不可能支持Android游戲開發(fā)的。

    ?

    c.初學(xué)手機(jī)游戲開發(fā)的,如果只想搞iOS游戲開發(fā),那么可以直接學(xué)Sprite Kit,不必從cocos2d-iphone學(xué)起。

    ? ??

    d..現(xiàn)有的開發(fā)者,如果只專注iOS游戲,那么完全沒必要轉(zhuǎn)到Sprite Kit。cocos2d的功能足夠強(qiáng)大。

    ? ??

    e.Sprite Kit的成功與否取決于iOS平臺能否繼續(xù)發(fā)力。


    總結(jié)

    以上是生活随笔為你收集整理的iOS7的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。