试着想更多的面向对象,什么是每个对象负责为?
我们的敌人至极,我们可以打:
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的界面。尝试做更多的阅读,这是非常基本和重要的东西。 –