1. 程式人生 > >cocos2d x遊戲開發系列教程 坦克大戰遊戲之虛擬手柄控制坦克移動

cocos2d x遊戲開發系列教程 坦克大戰遊戲之虛擬手柄控制坦克移動

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

上篇顯示了控制手柄,但是還不能用來控制坦克,

這篇將會講手柄和坦克的移動結合起來。

1.先在CityScene場景中實現場景的虛擬函式virtual void onEnter();

onEnter在進入場景後將會被呼叫,我們在onEnter中設定一個定時器,

遊戲每一幀都呼叫次,這樣我們可以在每幀中檢測手柄按鈕是否被按下,

然後控制坦克的移動,onEnter和update的函式實現如下:

void CityScene::onEnter(){ CCLayer::onEnter(); this->scheduleUpdate();}void CityScene::update(float delta){ CCLayer::update(delta); //簡單的向前運動,測試使用 mPlayerTank[0]->setPositionY(mPlayerTank[0]->getPositionY()+1
);}

在上面的update函式中,我們為了測試效果,簡單的讓坦克向前移動。


2.為了能通過控制手柄產生的命令控制坦克移動,我們在Tank類中新增相應命令函式

void command(enumOrder order);,實現函式如下:

void Tank::command(enumOrder order){ float stepX = 0.0ffloat stepY = 0.0fswitch (order) { case cmdNothing:  breakcase cmdGoUP:  stepY = 1.0f
;  breakcase cmdGoDown:  stepY = -1.0f;  breakcase cmdGoLeft:  stepX = -1.0f;  breakcase cmdGoRight:  stepX = 1.0f;  breakcase cmdFire:  breakdefault:  break; } setPositionX(getPositionX() + stepX); setPositionY(getPositionY() + stepY);}

4.我們接下來要使坦克響應虛擬手柄的控制,還需要修改第一步中的update。

在update中獲取虛擬手柄的命令,然後傳入Tank的命令控制函式command中:

void CityScene::update(float delta){ CCLayer::update(delta); //將控制面板中的mLayerPanel獲取的命令傳給坦克 mPlayerTank[0]->command(mLayerPanel->getOrder());}

5.我們嘗試點選虛擬手柄,可以看到坦克已經可以自由移動了,但是移動的時候坦克方向沒有改變,

我們根據移動方向來旋轉坦克,使用setRotation,具體實現如下:

void Tank::command(enumOrder order){ float stepX = 0.0ffloat stepY = 0.0fstatic float fRotation = 0.0fswitch (order) { case cmdNothing:  breakcase cmdGoUP:  stepY = 1.0f;  fRotation = 0.0f;  breakcase cmdGoDown:  stepY = -1.0f;  fRotation = 180.0f;  breakcase cmdGoLeft:  stepX = -1.0f;  fRotation = 270.0f;  breakcase cmdGoRight:  stepX = 1.0f;  fRotation = 90.0f;  breakcase cmdFire:  breakdefault:  break; } setPositionX(getPositionX() + stepX); setPositionY(getPositionY() + stepY); setRotation(fRotation);}

下面用我們的滑鼠來控制上下左右可以正常移動了。效果如下: