内部方法影响外部循环

public function collide():Boolean {
            var tanks:Array = Global.tanks;
            
            // collision detection between bullets and tanks
            for (var i:int = tanks.length - 1; i >= 0; i--)
            {
                // tanks won't hit themselves
                if (sender.id == tanks[i].id || sender.type == tanks[i].type) {
                    continue;
                }
                if (new Point(global_x, global_y).collideRect(tanks[i].getRect())) {
                    
                    // check tank's hp points
                    if (tanks[i].hp > 0) {
                        tanks[i].hp -= this.damage;
                    }
                    if (tanks[i].hp <= 0) {
                        if (tanks[i].type == 'enemy_tank') {
                            Global.current_enemies_num--;
                            // gain experience
                            (this.sender as AllyTank).gainExp(tanks[i].containing_exp);
                        }
                        
                        tanks[i].remove();
                        Global.dying_tanks = Global.dying_tanks.concat(tanks.splice(i, 1));
                    }
                    
                    return true;
                }
            }
           
...

想将循环内的代码封装为Bullet::hitTank(), 但是这里面的代码有continue和return true, 分别影响for循环及collide()


如果封装成方法, 怎么才能使这段代码原有的影响不会改变

想到一个方法是方法返回string, 然后检查返回值做出相应操作: 比如返回'hit_self'的话就continue, 返回'hit_complete'就返回return true

坏处就是无法快速得知这个方法所有的返回值(仅通过看函数原型)


考虑更好的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值