(NO.00002)iOS遊戲精靈戰爭雛形(九)
開啟MainScene.m,添加shoot方法:
//子彈速度現在和目標距離相關,越近速度越慢,反之越快.應該修改為恒定速度.-(void)shoot:(CCNode*)player target:(CGPoint)point{ CGPoint velocity = ccpSub(point, player.position); velocity = ccpMult(velocity, 50); if (ABS(velocity.x) < 20 || ABS(velocity.y) < 20) { velocity = ccpMult(velocity, 5); } if (ABS(velocity.x) > 200 || ABS(velocity.y) > 200){ velocity = ccpMult(velocity, 0.5); } CCNode *bullet = [self loadBullet]; NSAssert(bullet, @bullet must not nil); bullet.position = player.position; CCPhysicsBody *physicsBody = bullet.physicsBody; [physicsBody applyAngularImpulse:10]; [physicsBody applyImpulse:velocity];}
我們詳細說說這個方法.首先該參數傳入2個參數,分別對應發射點和目標點.計算可知子彈力矩為velocity.因為預設力矩太小,力太微弱,我們需要適當放大該力矩.具體應該放大多少應該根據實際App運行效果來定,我這裡覺得50倍比較合適.
在實際子彈發射過程中,可能會出現由於力矩的某條邊角度過小或過大導致子彈速度過快或過慢得現象.我們需要根據實際角度調整力矩的值.我承認這隻是權宜之計,如果時間允許這段判斷代碼需要進一步修改.
然後是上膛子彈到bullet中,這裡做了斷言以防沒有子彈,正常情況下這應該是不可能發生的.
注意loadBullet方法已經將返回的子彈設定為可見了.接下來我們設定子彈的初始位置,取得子彈的物理對象,然後應用指定的力矩.
而應用力矩方法上面還調用了另一個方法applyAngularImpulse,這個方法用來使發出的子彈旋轉,增加視覺效果.