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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【玩转cocos2d-x之三十五】Earth Warrior 3D大揭秘

發(fā)布時間:2024/4/11 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【玩转cocos2d-x之三十五】Earth Warrior 3D大揭秘 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
3D游戲現(xiàn)在玩起來門檻還是挺高的。不過如果在Cocos2d-x引擎加入3D擴展,實現(xiàn)2.5D游戲效果又會怎么樣?

1.概述

先上大會現(xiàn)場演示圖:

Apk下載: http://pan.baidu.com/s/1ntM75bV
源碼下載: https://github.com/chukong/EarthWarrior3D.git ,給個star不費電。。。
開發(fā)環(huán)境:Cocos2d-x v3.0 + Sprite3D擴展

適用平臺:Mac/iOS/Android


2.Sprite3D擴展

2.1. Sprite3D

sprite3D擴展目前可以支持加載靜態(tài)obj模型。

[cpp]?view plaincopy
  • auto?model?=?Sprite3D::create("3dmodel.obj",?"texture.png");??
  • 2.2. Toon Shading

    Cocos2d-x精靈不能做發(fā)光效果,而Sprite3D中加入了發(fā)光函數(shù),指定outline width和color就行了。
    [cpp]?view plaincopy
  • model->setOutline(1.5,?Color3B(0,0,0));?//?設(shè)置發(fā)光寬度1.5,黑色??
  • 2.3. 3D API

    3D API是Cocos2d-x v3.0就具有的屬性,源碼可以到Node上看。

    [cpp]?view plaincopy
  • node->setPosition3D(Vertex3F(x,y,z));//設(shè)置位置??
  • Vertex3F?pos?=?node->getPosition3D();??
  • node->setRotation3D(Vertex3F(x,y,z));//設(shè)置旋轉(zhuǎn)??
  • Vertex3F?rot?=?node->getRotation3D();??
  • 其中Vertex3F當(dāng)然就是指定了三維空間。而3D API同樣也移植到了一些動作中,比如:

    [cpp]?view plaincopy
  • node->runAction(RotateBy::create(Vertex3F(x,y,z)));??
  • 完全沒問題。


    3.EarthWarrior

    Classes/3d文件夾包含了Sprite3D。其余文件為游戲邏輯控制,游戲總共三個場景

    3.1. 主菜單界面(MainMenuScene)

    包含 :主菜單場景(MainMenuScene),飛機模型(Plane),License和Credits層(LicenseLayer)。


    關(guān)鍵點:①主界面3D飛機的實現(xiàn)

    [cpp]?view plaincopy
  • //Plane.cpp??
  • _Model?=?Sprite3D::create("playerv002.obj",?"playerv002_256.png");??
  • if(_Model){??
  • ????_Model->setScale(55);??
  • ????((Sprite3D*)_Model)->setOutline(0.035,?Color3B::BLACK);??
  • ????_Model->setRotation3D(Vertex3F(originX,originY,originZ));??
  • ????this->setRotation3D(Vertex3F(originX,?originY,?originZ));??
  • ????this->addChild(_Model);??
  • ????this->scheduleUpdate();??
  • }??
  • ②對數(shù)學(xué)感興趣的可以研究一下scheduleUpdate怎樣讓飛機晃啊晃。。。粒子系統(tǒng)這里就不再重復(fù)了。
    [cpp]?view plaincopy
  • void?Plane::update(float?dt)??
  • {??
  • ????pRate+=0.01;??
  • ????_Model->setRotation3D(Vertex3F(0-pXA*sin(pXW*pRate),0,0-pZA*sin(pZW*pRate)));??
  • }??
  • 3.2. 載入界面(LoadingScene)

    包含 :載入場景(LoadingScene),粒子管理器(ParticleManager)

    ?
    關(guān)鍵點 :①Loading界面實現(xiàn)資源的預(yù)加載,包括音樂,紋理,粒子效果,其中紋理使用異步加載,粒子效果在ParticleManager(單例類)中加載。
    ②同時Loading界面也實現(xiàn)了游戲元素的預(yù)創(chuàng)建并保存在全局池中,避免游戲過程中的卡頓現(xiàn)象和反復(fù)create的低效,包括四類敵機和導(dǎo)彈Missile,在update中實現(xiàn)每幀創(chuàng)建一個,避免LoadingScene的卡頓。

    ③cocos Logo的旋轉(zhuǎn)動畫

    [cpp]?view plaincopy
  • void?LoadingScene::InitCoco()??
  • {??
  • ????Size?visibleSize?=?Director::getInstance()->getVisibleSize();??
  • ????auto?coco?=?Sprite3D::create("coconut.obj",?"coco.png");??
  • ????if(coco)??
  • ????{??
  • ????????coco->setPosition(Point(visibleSize.width/2,?visibleSize.height/2-150));??
  • ????????coco->setOutline(10,Color3B(0,0,0));??
  • ????????addChild(coco,1);??
  • ????????coco->runAction(RepeatForever::create(RotateBy::create(0.8f,Vertex3F(0,360,0))));??
  • ????}??
  • }??
  • 3.3. 游戲界面(HelloWorldScene)

    包含 :游戲?qū)?#xff08;GameLayer),游戲元素基類(GameEntity),飛機類(AirCraft),玩家類(Player),敵機類(Enemies,又包括Fodder,FodderLeader,BigDude,Boss四類敵機),子彈類(Bullet,又包括PlayerBullet,Missile兩類子彈),效果管理類(EffectManager),爆炸類(Explosion,又包括SmallExplosion,BigExplosion,BulletExplosion),游戲控制層(GameController,又包括BulletController,EnemyController和GameController),游戲結(jié)束層(GameOverLayer)

    ?
    關(guān)鍵點:①玩家和敵機的子彈控制統(tǒng)一在BulletController::spawnBullet中處理。如上述游戲元素保存在全局池中,可回收利用,避免反復(fù)創(chuàng)建,spawnBullet會先從這個池中取出,如果該池為空才會創(chuàng)建對于的子彈。
    ②敵機的處理也是采用相同的方式,在EnemyController::spawnEnemy中處理,如果該池為空才會創(chuàng)建對于的敵機。
    ③GameLayer::gameMaster管理敵機的出現(xiàn)的頻率。
    ④GameController::update管理游戲的碰撞檢測。

    除了一些數(shù)學(xué)上的計算比較羞澀意外,整個游戲的邏輯還是比較簡單的。。。這里就不細(xì)說了,大家直接看源碼吧。。。

    總結(jié)

    以上是生活随笔為你收集整理的【玩转cocos2d-x之三十五】Earth Warrior 3D大揭秘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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