真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

了解CCMoveToCCCallFuncNCCSequence用法-創(chuàng)新互聯(lián)

在《iPhone & iPad Cocos2D游戲開(kāi)發(fā)實(shí)戰(zhàn)》一書(shū)中在看第四章時(shí)候遇到陌生知識(shí),然后在網(wǎng)上找到相關(guān)知識(shí)點(diǎn),再此記錄;

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括鳳泉網(wǎng)站建設(shè)、鳳泉網(wǎng)站制作、鳳泉網(wǎng)頁(yè)制作以及鳳泉網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鳳泉網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到鳳泉省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

由序列控制蜘蛛的移動(dòng)方法代碼

-(void) runSpiderMoveSequence:(CCSprite*)spider { // 隨著時(shí)間慢慢增加蜘蛛的移動(dòng)速度  numSpidersMoved++;//定義的int型變量 if (numSpidersMoved % 8 == 0 && spiderMoveDuration > 2.0f) { spiderMoveDuration -= 0.1f; } // 用于控制蜘蛛移動(dòng)的動(dòng)作序列 CGPoint belowScreenPosition = CGPointMake(spider.position.x, -[spider texture].contentSize.height); CCMoveTo* move = [CCMoveTo actionWithDuration:spiderMoveDuration position:belowScreenPosition]; CCCallFuncN* call = [CCCallFuncN actionWithTarget:self selector:@selector(spiderBelowScreen:)]; CCSequence* sequence = [CCSequence actions:move, call, nil]; [spider runAction:sequence];  }

RunSpiderMoveSequence方法的作用是跟蹤已被放下的蜘蛛數(shù)量。每次到第八個(gè)蜘蛛時(shí),spiderMoveDuration的值就會(huì)被減少,從而提高所有蜘蛛的移動(dòng)速度。%這個(gè)符號(hào)叫作“余數(shù)運(yùn)算子”(Modulus Operator),用于得到運(yùn)用除法以后得到的余數(shù)。比如,如果numSpidersMoved可以用8除盡,那么“余數(shù)運(yùn)算子”的計(jì)算結(jié)果就應(yīng)該是0。

這里用到的動(dòng)作序列只有一個(gè)CCMoveTo動(dòng)作和一個(gè)CCCallFuncN動(dòng)作。你可以改進(jìn)蜘蛛的行為,比如讓它往下移動(dòng)一點(diǎn),等個(gè)幾秒鐘,然后一直移動(dòng)到底部,就像真的邪惡的蜘蛛通常會(huì)做的那樣。我將把具體的做法留給你去發(fā)揮。我選擇CCCallFuncN的目的是給spiderBelowScreen方法傳遞蜘蛛精靈作為它的sender變量。這樣的話,當(dāng)某只蜘蛛到達(dá)屏幕底部時(shí),我就可以直接引用那個(gè)蜘蛛,不需要再去到處找了

1.CCMoveTo

表示移動(dòng)到某一個(gè)點(diǎn),還有一個(gè)與它類(lèi)似的CCMoveBy表示移動(dòng)相對(duì)于當(dāng)前位置某個(gè)位置,相當(dāng)于一個(gè)向量;

2.CCCallFuncN

CCCallFuncN 帶有一個(gè)參數(shù),這個(gè)參數(shù)本身是一個(gè)Action,相當(dāng)于他的參數(shù)就是一個(gè)BUtton;與它類(lèi)似的還有

CCCallFunc 不帶參數(shù), 執(zhí)行回調(diào)函數(shù)方法,

CCCallFuncND 帶兩個(gè)參數(shù),一個(gè)是Action動(dòng)作,另一個(gè)是自定義的參數(shù)

CCCallFuncO 也是兩個(gè)參數(shù),和CCCallFuncN參數(shù)一樣,


以下是幾個(gè)類(lèi)在CCActionInstant.m文件中的定義,通過(guò)他們的-(void)execute函數(shù)看出他們參數(shù)問(wèn)題

// // CallFunc // #pragma mark CCCallFunc  @implementation CCCallFunc  @synthesize targetCallback = targetCallback_;  +(id) actionWithTarget: (id) t selector:(SEL) s { 	return [[[self alloc] initWithTarget: t selector: s] autorelease]; }  -(id) initWithTarget: (id) t selector:(SEL) s { 	if( (self=[super init]) ) { 		self.targetCallback = t; 		selector_ = s; 	} 	return self; }  -(NSString*) description { 	return [NSString stringWithFormat:@"<%@ = %p | Tag = %ld | selector = %@>", 			[self class], 			self, 			(long)tag_, 			NSStringFromSelector(selector_) 			]; }  -(void) dealloc { 	[targetCallback_ release]; 	[super dealloc]; }  -(id) copyWithZone: (NSZone*) zone { 	CCActionInstant *copy = [[[self class] allocWithZone: zone] initWithTarget:targetCallback_ selector:selector_]; 	return copy; }  -(void) update:(ccTime)time { 	[self execute]; }  -(void) execute { 	[targetCallback_ performSelector:selector_]; } @end
 // // CallFuncN // #pragma mark CCCallFuncN  @implementation CCCallFuncN  -(void) execute { 	[targetCallback_ performSelector:selector_ withObject:target_]; } @end
 // // CallFuncND // #pragma mark CCCallFuncND  @implementation CCCallFuncND  @synthesize callbackMethod = callbackMethod_;  +(id) actionWithTarget:(id)t selector:(SEL)s data:(void*)d { 	return [[[self alloc] initWithTarget:t selector:s data:d] autorelease]; }  -(id) initWithTarget:(id)t selector:(SEL)s data:(void*)d { 	if( (self=[super initWithTarget:t selector:s]) ) { 		data_ = d;  #if COCOS2D_DEBUG 		NSMethodSignature * sig = [t methodSignatureForSelector:s]; // added 		NSAssert(sig !=0 , @"Signature not found for selector - does it have the following form? -(void)name:(id)sender data:(void*)data"); #endif 		callbackMethod_ = (CC_CALLBACK_ND) [t methodForSelector:s]; 	} 	return self; }  -(id) copyWithZone: (NSZone*) zone { 	CCActionInstant *copy = [[[self class] allocWithZone: zone] initWithTarget:targetCallback_ selector:selector_ data:data_]; 	return copy; }  -(void) dealloc { 	// nothing to dealloc really. Everything is dealloc on super (CCCallFuncN) 	[super dealloc]; }  -(void) execute { 	callbackMethod_(targetCallback_,selector_,target_, data_); } @end
 @implementation CCCallFuncO @synthesize  object = object_;  +(id) actionWithTarget: (id) t selector:(SEL) s object:(id)object { 	return [[[self alloc] initWithTarget:t selector:s object:object] autorelease]; }  -(id) initWithTarget:(id) t selector:(SEL) s object:(id)object { 	if( (self=[super initWithTarget:t selector:s] ) ) 		self.object = object;  	return self; }  - (void) dealloc { 	[object_ release]; 	[super dealloc]; }  -(id) copyWithZone: (NSZone*) zone { 	CCActionInstant *copy = [[[self class] allocWithZone: zone] initWithTarget:targetCallback_ selector:selector_ object:object_]; 	return copy; }   -(void) execute { 	[targetCallback_ performSelector:selector_ withObject:object_]; }  @end

3.CCSequence

sequence是用來(lái)按順序執(zhí)行一系列的動(dòng)作,即動(dòng)作按排列的順序一個(gè)接一個(gè)的執(zhí)行,示例如下:

id action1 = [CCMoveTo actionWithDuration:2 position:ccp(100,100)]; id action2 = [CCMoveBy actionWithDuration:2  position: ccp(80,80)]; id action3 = [CCMoveBy actionWithDuration:2  position: ccp(0,80)]; [sprite runAction: [CCSequence actions:action1, action2, action3, nil]];

上面這段代碼的意思是,sprite(精靈對(duì)象)先移動(dòng)到坐標(biāo)(100,100)位置,然后在向右上方移動(dòng)(80,80),然后,再向右移動(dòng)80(80,0)。這一系列動(dòng)作是不重疊,一個(gè)接一個(gè)的執(zhí)行的。

注意的是,在這些動(dòng)作中不能有 CCRepeatForever 這種無(wú)限的動(dòng)作(就是不停的一直持續(xù)的動(dòng)作),必須是那種可以在有限的時(shí)間內(nèi)完成的。

另外在博客上看到其他幾個(gè)類(lèi)似的類(lèi)的用法,都是cocos2d常用動(dòng)作 原文連接 http://leeyin.iteye.com/blog/1306557

CCSpawn

這個(gè)與上面的 CCSequence 不同的是,排列的動(dòng)作是同時(shí)執(zhí)行的,執(zhí)行的時(shí)間以子動(dòng)作中的最長(zhǎng)的時(shí)間為準(zhǔn)。代碼示例:

id action = [CCSpawn actions: 		[CCJumpBy actionWithDuration:2 position:ccp(300,0) height:50 jumps:4], 		[CCRotateBy actionWithDuration: 2 angle: 720], 		nil];   [sprite runAction:action];

上面這段代碼的意思是,sprite 在兩秒鐘內(nèi),向右跳四次,總共跳躍距離是300,跳躍高度是50,在跳躍過(guò)程中 同時(shí)旋轉(zhuǎn)720度。

CCRepeat

這個(gè)是用來(lái)重復(fù)一個(gè)動(dòng)作有限的次數(shù)。當(dāng)然,你也可以用CCSequence來(lái)實(shí)現(xiàn)同樣的功能,只是那樣看起來(lái)有點(diǎn)傻。示例:

id a1 = [CCMoveBy actionWithDuration:1 position:ccp(150,0)]; id action1 = [CCRepeat actionWithAction: 		[CCSequence actions: [CCPlace actionWithPosition:ccp(60,60)], a1, nil] 		times:3]; [sprite runAction:action1];

上面這段代碼的意思是,先將sprite 放置在(60,60)位置,然后一秒內(nèi)向右移動(dòng)150的距離。這兩個(gè)動(dòng)作重復(fù)3次。

CCRepeatForever

上面的是重復(fù)有限次數(shù),這個(gè)是無(wú)限次重復(fù),比如,你想讓一個(gè)輪子不停的旋轉(zhuǎn),就可以用這個(gè)實(shí)現(xiàn)。示例:

CCRotateBy* rotate = [CCRotateBy actionWithDuration:1.0f angle:360]; CCRepeatForever* action2 = [CCRepeatForever actionWithAction:rotate]; [sprite runAction:action2];

就像上面講的這段代碼會(huì)讓這個(gè) sprite 一直不停的 以每秒360度的轉(zhuǎn)速永遠(yuǎn)的旋轉(zhuǎn)下去。 

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


本文題目:了解CCMoveToCCCallFuncNCCSequence用法-創(chuàng)新互聯(lián)
標(biāo)題URL:http://weahome.cn/article/ceessg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部