cocos2d x遊戲開發系列教程 坦克大戰遊戲之虛擬手柄控制坦克移動
阿新 • • 發佈:2018-11-08
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!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.0f; float stepY = 0.0f; switch (order) { case cmdNothing: break; case cmdGoUP: stepY = 1.0f ; break; case cmdGoDown: stepY = -1.0f; break; case cmdGoLeft: stepX = -1.0f; break; case cmdGoRight: stepX = 1.0f; break; case cmdFire: break; default: 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.0f; float stepY = 0.0f; static float fRotation = 0.0f; switch (order) { case cmdNothing: break; case cmdGoUP: stepY = 1.0f; fRotation = 0.0f; break; case cmdGoDown: stepY = -1.0f; fRotation = 180.0f; break; case cmdGoLeft: stepX = -1.0f; fRotation = 270.0f; break; case cmdGoRight: stepX = 1.0f; fRotation = 90.0f; break; case cmdFire: break; default: break; } setPositionX(getPositionX() + stepX); setPositionY(getPositionY() + stepY); setRotation(fRotation);}
下面用我們的滑鼠來控制上下左右可以正常移動了。效果如下: