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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cocos2d-x 2x 菜鸟编塔防 02 添加敌人

發布時間:2024/4/11 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cocos2d-x 2x 菜鸟编塔防 02 添加敌人 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面我們呢來編寫一個敵人類,這個類目前主要有如下幾個功能:

  • 實現各個方向的幀動畫切換
  • 從起點走到終點
  • 可改變行走速度
  • 到達終點后消失
  • 是不是覺得功能有點少啊,還是那句話,以后慢慢添加。


    寫在最前面:

    首先說說怎么實現上面說的這幾個功能,流程如下:

    第一步.首先我是定義了幾個可能用到的私有變量

  • ????????//敵人圖片 ?
  • CCSprite??*?_creep; ?
  • //怪物血量 ?
  • int?_creepHP; ?
  • //怪物移動速度,每秒多少像素 ?
  • float?_CreepMoveSpeed; ?
  • //當前路點序號 ?
  • int?_wayPointNow; ?
  • //當前方向 ?
  • int?_nowDirection; ?
  • //creep是否正在移動 ?
  • bool?_moving;?
  • 這幾個變量的用途很簡單,大部分都能看懂,說說幾個用途很亂的吧(新手沒辦法)

  • //當前路點序號
  • int _wayPointNow;?
  • 上面這個就是保存了敵人行走的路點序號,就是敵人剛剛走過的路點,比如:敵人走過了a路點,正向著b路點前進,_waypoint就是路點A 。這樣說明白了吧。(路點我是為了測試自己瞎寫的)

    這個路點的序號作用是什么呢?

    塔防嗎,就要有敵人按照路徑走到一個終點,在這走的過程中會有許多轉彎的地方,敵人有一個行走的幀動畫,在變化方向的時候,我們也要讓動畫做相應的改變,這樣看著才有意思。我是這樣讓敵人切換轉向的:通過比對當前路點和下一個路點得出相對的方向,也就是一個坐標系中a,b兩點,b點在a點的上面還是下面,左還是右。得到這個方向之后我們就可以寫個函數改變敵人的動畫了。


    ?第二步. 初始化一些參數

    ?

  • //--------------對敵人進行初始化------------------- ?
  • ?//設置移動速度 ?
  • ?_CreepMoveSpeed?=?100; ?
  • ?//設置血量 ?
  • ?_creepHP?=?100; ?
  • ?//初始化路點序列 ?
  • ?_wayPointNow?=?0; ?
  • ?//初始化當前方向 ?
  • ?_nowDirection=?getDirection(); ?
  • ?//初始化精靈 ?
  • ?//_creep??=?CCSprite::create("CloseNormal.png"); ?
  • ?//初始化是否正在移動 ?
  • ?_moving?=?false; ?
  • _creep??=?CCSprite::create(); ?
  • ?_creep->setTag(kSprite); ?
  • ?_creep->setPosition(sHWorld->_wayPoint->getControlPointAtIndex(_wayPointNow)); ?
  • ?setDirectionAnimation(getDirection()); ?
  • ?this->addChild(_creep);?
  • 第17行的setDirectionAnimation就是一個改變動畫方向的函數,其參數就是一個關于放心的枚舉,getDirection就是計算方向.

    第三步:永遠運行的游戲邏輯

    在初始化init函數最后加上

  • schedule(schedule_selector(mC_Creep::gamelogic));?
  • 讓每幀都調用gamelogic函數

    ?

  • void?mC_Creep::gamelogic(?float?dt?) ?
  • ?{ ?
  • ????/*??CCLOG("xy?is?%f?%f",x,y);*/?
  • ?????//如果不移動則運行 ?
  • ?????if(!_moving)?creepMove(); ?
  • ???? ?
  • ?????if?(_creepHP?==?0?) ?
  • ?????{ ?
  • ?????????this->stopAllActions(); ?
  • ?????????this->unscheduleAllSelectors(); ?
  • ?????????sHWorld->_creepGroup->removeObject(this,true); ?
  • ?????????this->removeChildByTag(kSprite,true); ?
  • ?????} ?
  • ?
  • ?}?
  • 首先判斷,如果不是在移動就會判斷一下,當HP為0?的時候(被敵人殺死,或者走到了終點我就設置HP 為0),我就做了一些釋放,SHworld是用來保存所有的敵人的一個CCArray,作用以后再說。

    看看CreepMove函數有什么東西:

    ?

  • void?mC_Creep::creepMove() ?
  • ?{?? ?
  • ?????//1是computeFinishTime()計算直線行走的時間 ?
  • ?????//2.是下一個露點的坐標 ?
  • ?????????????CCActionInterval?*?t_Action?=?CCMoveTo::create( ?
  • ?????????????????computeFinishTime(),//1 ?
  • ?????????????????sHWorld->_wayPoint->getControlPointAtIndex(_wayPointNow+1)//2 ?
  • ?????????????????); ?
  • ?????????????//修改標簽,以方便獲得 ?
  • ?????????????t_Action->setTag(kSpeedAction); ?
  • ?????????????//生產一個回調函數動作 ?
  • ?????????????CCCallFunc?*?callfun?=?CCCallFunc::create(this,callfunc_selector(mC_Creep::movebyActionCallBack)); ?
  • ?????????????//生產一個系列動作,讓移動完后調用movebyActionCallBack函數 ?
  • ?????????????CCFiniteTimeAction?*?seq?=?CCSequence::create(t_Action,callfun,NULL); ?
  • ?????????????//生產速度動作,用于后面的炮彈減速效果 ?
  • ?????????????CCSpeed?*?speedaction?=?CCSpeed::create((CCActionInterval?*)seq,1.0f); ?
  • ?????????????speedaction->setTag(kSpeedAction); ?
  • ?????????????//設置成正在移動。前面有判斷如果正在移動就不運作這個函數了 ?
  • ?????????????_moving?=?true; ?
  • ?????????????//開始所有的動作 ?
  • ?????????????_creep->runAction(speedaction); ?
  • ???????? ?
  • ?}?
  • 首先是一個moveto動畫,computeFinishTime是用路程除以速度得到的時間,當然這路程是一小段一小段的直線距離。

    最后看看

    ?

  • void?mC_Creep::movebyActionCallBack() ?
  • { ?
  • ?//設置成動作已經完成,可以調用creepMove()讓精靈移動 ?
  • ?_moving?=?false; ?
  • ?do? ?
  • ?{ ?
  • ????//?CCLOG("pointnow?is?:%d",_wayPointNow); ?
  • ?????//改變當前露點。我們已經移動過來了 ?
  • ?????_wayPointNow++; ?
  • ?????//如果下一個露點序號超出了,所有露點序列的范圍 ?
  • ?????if(_wayPointNow>(sHWorld->_wayPoint->count()))? ?
  • ?????{ ?
  • ?????????//定制所有動作 ?
  • ?????????_creep->stopAllActions(); ?
  • ?????????//HP?設為?0?,讓它消失 ?
  • ?????????_creepHP?=?0; ?
  • ?????????//設置為永遠在動,不讓它再運行creepMove(); ?
  • ?????????_moving?=?true; ?
  • ?????????break; ?
  • ?????} ?
  • ?????//修改動畫 ?
  • ??????setDirectionAnimation(getDirection()); ?
  • ???? ?
  • ?}?while?(0); ?
  • ?
  • }?
  • 基本上也就這個意思了,我是個新手水平肯定是不高的,如果有錯誤請指出,歡迎。

    ?

    轉載于:https://blog.51cto.com/farsa/1137360

    總結

    以上是生活随笔為你收集整理的cocos2d-x 2x 菜鸟编塔防 02 添加敌人的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 污视频免费在线观看 | 奇米一区二区三区 | 国产精品二区在线 | 日韩成人av一区二区 | 久久亚洲综合网 | 男女污污网站 | 雪白的扔子视频大全在线观看 | 99亚洲国产精品 | 在线观看中文字幕2021 | 国产黑丝精品 | xxxxxx国产| 亚洲专区中文字幕 | 国产又大又黄又爽 | 免费看日韩毛片 | mm131亚洲精品 | 色黄视频在线观看 | 国产精品一区二区三区免费在线观看 | 九九视频免费 | 在线观看成人免费视频 | 国产二区免费 | 91一区 | 涩涩97| 91视频免费观看 | 免费看黄在线观看 | 青青草成人免费在线视频 | 久久精品激情 | 少妇一级淫片免费观看 | 欧美精品一级片 | 午夜天堂精品久久久久 | 91av入口| 日本老太婆做爰视频 | 欧洲精品码一区二区三区免费看 | 久操不卡| 色一情一乱一伦一区二区三区 | 男人天堂导航 | 欧美日韩国产一区二区三区 | 亚洲男人天堂2019 | 成人在线观看免费网站 | 日韩精品在线免费观看 | av大全免费观看 | 久久国产麻豆 | 制服丝袜国产精品 | 潮喷失禁大喷水无码 | 爱福利视频一区二区 | 成年人av在线播放 | 国产精品久久久精品三级 | 国偷自产视频一区二区久 | 欧美性第一页 | 这里只有精品视频在线 | 久久精品国产亚洲av久一一区 | 久久久久一| 国产91丝袜在线播放0 | 国内偷拍精品视频 | 国内自拍在线观看 | 欧美视频久久 | 亚洲草草网| 欧美成人视屏 | 午夜久久福利 | 日本一级吃奶淫片免费 | 国语对白一区 | 亚洲jlzzjizz少妇 | たちの熟人妻av一区二区 | 免费毛片小视频 | 国产精品一线天粉嫩av | 免费成人小视频 | 窝窝在线视频 | 国产精品电影网站 | 日韩精品免费电影 | 国产精品一区二区三区四区在线观看 | 国产在线观看免费视频今夜 | 亚洲国产av一区 | 男女污污网站 | 少妇高潮av | 涩涩屋污 | 日韩一区久久 | 极品人妻一区二区三区 | 亚洲乱码国产乱码精品精 | 成人国产免费 | 在线观看视频一区二区 | 我的丝袜美腿尤物麻麻 | 青娱乐最新地址 | 最新黄色av网站 | 国产精品福利导航 | 日本无遮挡边做边爱边摸 | 人人综合网 | 国产精品久久久久久婷婷天堂 | 国内久久精品 | 欧美成人一级视频 | 国产精品v欧美精品v日韩精品 | 人人看人人模 | 天天爱天天舔 | 在线观看不卡av | 婷婷资源网 | 一区二区小说 | 波多野结衣女同 | 中文字幕啪啪 | 久久9966| 一起操网站 | 熟女俱乐部五十路六十路av |