試着想更多的面向對象,什麼是每個對象負責爲?
我們的敵人至極,我們可以打:
class Enemy : extends NPC implements IHittable {
. . .
function update(delta) {
// move, shoot, etc.
}
function handleHit(bullet) {
// die
}
}
一個hittable對象:
interface IHittable {
function handleHit(bullet);
}
子彈是假設移動和命中的事情:
class Bullet : {
function update(delta) {
// update position
}
function checkHits(world:World) {
for each(var hittable:IHittable in world.objects) { // might want to cluster objects by location if you're handling lots of objects/bullets)
if (isColidingWith(hittable))
o.handleHit(bullet);
}
}
}
然後我們擁有一切內在的世界:
class World {
var npcs: Array ...
var bullets: Array ...
var hittables: Array ...
function update(delta) {
foreach(var c:NPC in npcs)
c.update(delta);
foreach(var b:Bullet in bullets) {
b.update(delta);
b.checkCollisions(world);
}
}
}
和你的主循環是,僅僅簡單:
var lastTime:int;
function onEnterFrame(...) {
var now:int = getTimer(); // FlashPlayer utility function to get the time since start (in ms)
world.update(now - lastTime);
lastTime = now;
}
其他一些注意事項:
對不起,長的答案,但我控制不住自己:)
嘿感謝這個美好的答覆..:d真的有很多益處 你能解釋一下我的一些事情...... 什麼是接口的器具? 其次 我在這裏有點困惑..假設當我的子彈實例創建時,世界上有9個敵人實例,而子彈移動一個敵人實例被創建..所以,我的子彈實例如何檢查其衝突所有的敵人實例? –
你應該只有一個敵人名單,並且每當你創建一個新的敵人時,將它添加到那個地方,每次你檢查colisions,循環在列表中。在我的例子中,這將是World.npcs列表。 (npc =非玩家角色:p)。 –
接口是一種通過一些常見功能處理不同類型的對象的方法。想想你的電視和吸塵器,他們都可以實現一個名爲CanTurnOn的界面。嘗試做更多的閱讀,這是非常基本和重要的東西。 –