[cocos2d 開發]看我怎麼山寨 跳躍忍者 !!!ninjump 1

cocos2d 開發]看我怎麼山寨 忍者跳躍 !!!

          其實中國的遊戲開發者不寫遊戲!這裏包含各種內涵的意思 ...

如今山寨成風,今個兒開始山寨 一款從iphone上,跨平臺到android 很火的遊戲 . ninjump (忍者跳躍).

要山寨 先搞清楚別人是怎麼開發的 ,能否直接獲取到別人的素材?! 這個很關鍵,因爲中國的開發者,一個窮屌絲往往兼顧幾個人的使用:遊戲策劃,遊戲運營,遊戲編程,遊戲美工,遊戲音效 等等崗位.  結果出來,各種排斥,各種難賺錢,最後走上加廣告的道路,各種推送,各種被罵...如何之苦b,就不是這裏要討論的話題了.剛剛說到 遊戲素材,最好能解壓apk,拿到直接的png圖片,有的 是pk文件,就有些麻煩,別人打包了比較難竊取,今天不討論.自己下去研究下. 

       其次要搞清楚別人的開發技術 ,所以遊戲 一般有一個技術總監,來指導遊戲編程. 解壓後ninjump.apk後,你就會發現,裏面 目錄其實很清楚 : \assets\ 下面放着各種  : music  ;scripts;sounds;textures 等 ;通過名字大概就知道 圖片紋理在哪,聲音在哪;

       scripts 是放在全是lua文件.可知,它是採用 lua腳本編程,java很少的代碼, 是c++的引擎庫 和lua 腳本實現遊戲界面.

而且它能很好的跨平臺,只要再各各平臺實現 引擎庫,lua 都不用變 直接上,很是方便. 開源的引擎是有很多的.

今個兒選擇 cocos2d 來山寨它 .

       先上山寨截圖.

        

       

  遊戲如今分幾個模塊來開發:

hero 英雄sbHero            :   climber 攀爬者, 向上攀爬. 處理各種 動畫腳本,碰撞反應

bg 背景sbBackGround   :    背景圖,背景滾動,這裏用到 2個 CCSpriteBatchNode 來循環 向下滾動 .

動畫管理器AnimationManager: 用來管理紋理緩衝,獲得動畫.(所有的動畫都從這裏獲取得)

bird      sbBird                :  鳥兒障礙物

squirrel  sbSquirrel        :   松鼠障礙物

star 飛鏢 sbStar            :   飛鏢障礙物

bomb     sbBomb       :   炸彈障礙物.

 

level    等級                   : 最關鍵的 一個類,管理 遊戲背景中障礙物的出現,已經碰撞檢測. 粒子效果的產生.遊戲的平很全靠它. 

關於動畫管理器AnimationManager: 動畫管理很重要,包含紋理CCTextureCache.

bool AnimationManager::initAnimationMap()
{
	CCAnimationCache::sharedAnimationCache()->addAnimation(createNPCAnimation(), "jumping");
	/* 代碼  ... 忽略20行 */

	return true;
}


CCAnimation* AnimationManager::createNPCAnimation()
{
	CCTexture2D *playerRunTexture = CCTextureCache::sharedTextureCache()->addImage("enemies/jumping.png");      
    CCAnimation* animation = CCAnimation::create();  
	for( int i = 0;i < 5;i++){  
        animation->addSpriteFrame(CCSpriteFrame::create(playerRunTexture, cocos2d::CCRectMake(100*i, 0, 100, 100)));  
    }  
	 for( int i = 0;i < 5;i++){  
        animation->addSpriteFrame(CCSpriteFrame::create(playerRunTexture, cocos2d::CCRectMake(100*i, 100, 100, 100)));  
    } 

 
    animation->setDelayPerUnit(0.4f/10 );
	animation->setRestoreOriginalFrame(false);
	return animation;
}

動畫使用呢,很簡單 .這個實現左右jump .  由於紋理 只有一個方向.通過 heroSprite->setFlipX(true);來設置精靈左右倒置.

case HERO_ACTION_JUMP_L:
		if( spState != HERO_ACTION_RUN_R )
					break;
		//heroSprite->setFlipX(false);
		action2 = CCMoveTo::create(0.4f, CCPointMake(HERO_OFFX, HERO_OFFY));  
		action = CCSpawn::create(sAnimationMgr->createAnimate("jumping") ,action2,NULL);
		action4 = CCCallFuncND::create(this,callfuncND_selector(sbHero::Action_done), (void *)act);
		action3  = CCSequence::create( action,action4,NULL   );

		heroSprite->runAction( action3 );
		spState = HERO_ACTION_JUMP_L;
		break;
以上爲代碼中一部分.使用其動畫!

JUMP動畫創建完成,調用完成後,走 Action_done  !

根據往左跳還是往右跳,分別是實現 jump 動畫 後的 向上爬 的動畫.


	void Action_done( void *ad ,int act )
	{
		switch( act )
		{
		case HERO_ACTION_JUMP_L:
			heroSprite->setPosition(ccp(HERO_OFFX,HERO_OFFY));  
			heroSprite->setFlipX(false);
			Start( HERO_ACTION_RUN );
			spState = HERO_ACTION_RUN_L;
			break;

		case HERO_ACTION_JUMP_R:
			 heroSprite->setPosition(ccp(SCREEN_SIZE_W-HERO_OFFX-40,HERO_OFFY));  
			 heroSprite->setFlipX(true);
			 Start( HERO_ACTION_RUN );
			 spState = HERO_ACTION_RUN_R;
			 break;
		case HERO_ACTION_RUNON_SQL:
			Action_done(NULL,spState);
			break;
/* 代碼  ... 忽略20行 */

這樣 通過 動畫管理器,實現一個左右跳動後,繼續向上爬的過程.

如此,繼續向動畫管理器中加入其他動畫實例,在需要的裏面調用. 比如bird 怎麼飛.  松鼠應該是在 曬衣服繩子上跳.


關於cocos2d 的粒子系統是我要說的.

CCParticleExplosion爆炸
CCParticleFire 火
CCParticleFireworks煙火
CCParticleFlower花
CCParticleGalaxy 銀河
CCParticleMeteor 流行
CCParticleRain 下雨
CCParticleSmoke 下雪
CCParticleSnow 炊煙
CCParticleSpiral 螺旋
CCParticleSun 太陽焰

這麼多 確實已經非常豐富了,配合 例子編輯器非常方便.

但是我想到的是, 粒子交互的問題 ,當 鳥兒碰到hero,此刻要播放 粒子效果動畫.cocos 非常痛苦的是 一個child 粒子系統 只能加入一次 ,就算remove 再加也不行;  那麼我每次播放粒子動畫 都需要 new這個動作,但是我又不能立刻釋放,因爲有的動作還沒做完,粒子系統要播放段時間, 所以 這裏需要 調用 autorelease ,將其加入到回首的隊列中去.  如果不調用,粒子系統將會再觸發的時候 消耗比較多的內存,時間久了就必然崩潰.

case ENEMY_ACTION_HIT:
			if( hit_count == 0){			
				if(spplc)
					spplc->autorelease();
			spplc =  new CCParticleSystemQuad();
			
			spplc->initWithFile("particles/bomb.plist");
			spplc->setPosition(20,20);
			spplc->setAutoRemoveOnFinish(true);
			spobj->addChild(spplc);
			spobj->setTexture(NULL);
			
			}
			hit_count++;


這次就將 目前遊戲 apk 程序放上去給大家下載: http://download.csdn.net/detail/icemanyandy/4966444






















發佈了47 篇原創文章 · 獲贊 15 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章