小滿(bill man)個人原創,歡迎轉載,轉載請註明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man
繼續簡易動作遊戲實例,本篇加入小怪並且加入小怪與主角的碰撞檢測,效果如下:
首先在場景的初始化函數中加入小怪的精靈,並設置位置與錨點:
enemy = CCSprite::spriteWithFile("SpinningPeas.png");
map->addChild(enemy, map->getChildren()->count() );
enemy->setPositionInPixels(ccp(winSize.width/2 + 80,32));
enemy->setAnchorPoint(ccp(0.5f,0));
下面是小怪的邏輯,就是左右移動,邏輯代碼如下:
就是用一個簡單的計步變量enemymovetick,並根據這個值給每幀的移動步長。
爲了使碰撞檢測精準,我自定義了主角與怪的寬高,也加到init函數中:
ownsize = CCSizeMake(40,100);
othersize = CCSizeMake(32,32);
下面來看碰撞檢測函數:
在函數根據兩個精靈的位置,以及之前設置的寬度,來檢測碰撞,兩個精靈的錨點都在腳底,錨點的橫座標之差的絕對值小於寬度一半差的和,縱座標的差(主角縱座標減去小怪縱座標只差)小於小怪的高,大於主角高乘以-1,也就是小怪和主角的相對位置如下:
小怪比這位置高(小矩形爲小怪):
小怪比這位置低:
也就是要在這個範圍內:
在update函數中調用檢測函數,並且處理碰撞:
首先爲主角加入受傷動作,然後將isreduce標誌爲true,也就是在受傷後5秒內不再檢測碰撞,然後用schedule函數在5秒後將isreduce置回false。並將水平速度設置爲0,
如有錯誤之處,希望大家多多指正
下一篇繼續簡易動作遊戲實例