正文

入 門(mén)(12)

iPhone & iPad Cocos2D游戲開(kāi)發(fā)實(shí)戰(zhàn) 作者:(美)伊特海姆


  

首先,用CCScene類(lèi)的靜態(tài)初始化器“+(id) node”創(chuàng)建一個(gè)CCScene對(duì)象。然后用同樣的方法創(chuàng)建一個(gè)HelloWorld對(duì)象,并把它添加到剛創(chuàng)建的CCScene對(duì)象中。最后把該CCScene對(duì)象返回給調(diào)用者。

在以下的代碼清單2-2中,你可能會(huì)發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象:在self = [super init]的調(diào)用中,self被賦值為父對(duì)象發(fā)送init消息后的返回值。如果你之前是一名C++程序員,看到這一幕一定會(huì)感動(dòng)痛苦萬(wàn)分。請(qǐng)不必太過(guò)沮喪。這行代碼表示:在Objective-C中,我們必須手動(dòng)調(diào)用父類(lèi)的init方法,該操作不會(huì)自動(dòng)完成。我們之所以用self來(lái)接收返回值,是為了防止返回值為nil的情況發(fā)生。

 

代碼清單2-2  使用init方法創(chuàng)建和添加Hello World標(biāo)簽

-(id) init

{

if ((self = [super init])) {

// create and initialize a label

CCLabel* label = [CCLabel labelWithString:@"Hello World"

fontName:@"Marker Felt" fontSize:64];

// get the window (screen) size from CCDirector

CGSize size = [[CCDirector sharedDirector] winSize];

// position the label at the center of the screen

label.position = CGPointMake(size.width / 2, size.height / 2);

// add the label as a child to this Layer

[self addChild: label];

}

return self;

}

如果Objective-C程序員調(diào)用[super init]的方式,另一種方法也許能令你比較容易接受。這種方法基本上和上面方法一樣,它也是有別于傳統(tǒng)寫(xiě)法的:

-(id) init

{

self = [super init];

if (self != nil) {

// do init stuff here ...

}

return self;

}

接下來(lái)我將解釋“Hello World”標(biāo)簽是如何添加到場(chǎng)景中的。如果回顧一下代碼清單2-2,你就會(huì)發(fā)現(xiàn)CCLabel對(duì)象是通過(guò)它的一個(gè)靜態(tài)初始化方法創(chuàng)建的,該方法會(huì)返回一個(gè)新創(chuàng)建的CCLabel類(lèi)實(shí)例,并把該對(duì)象添加到自動(dòng)釋放池中。為了防止該對(duì)象在init方法結(jié)束后從內(nèi)存中釋放,必須調(diào)用[self addChild:label]消息把它添加為self的子節(jié)點(diǎn)。同時(shí),該標(biāo)簽的position屬性被設(shè)置為屏幕中央。注意,既可以在調(diào)用addChild方法前對(duì)position屬性賦值,也可以在調(diào)用后進(jìn)行賦值。


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)