开发日志5-24

  Small gains bring great wealth. 

      ...........  * *  *...................... *  *  *....................................

     

    周一是新的一周的开始,愿这周能突破到服务器端,多人在线打架。 

     1) Correct Bugs: 

    实验:两个游戏人物,A-B的范围碰撞发生(T),但A-B的攻击碰撞没有发生(F);B-A的范围碰撞(T),B-A的攻击碰撞(F)。Bug出现的情况,非主控人物在对主控人物进行第一次攻击之后。

     检测发现:主控人物的攻击框被检测到,但非主控人物的攻击框检测不到。

    结果:本来开始我考虑的是,非主控人物和主控人物的数据搞混了,非主控人物的攻击框使用了主控人物的数据,因为主控人物此时处于休息状态,攻击框为零,所以会出现这种情况。

  最后发现,这个Bug的出现,是由于一个边界检测漏掉了一个数字:

  private static void CheckCollision(PlayerTemplate _data)
        {
            //检测碰撞集合
            if (true)
            {
                if (_data.bumparea >= 2)  //if (_data.bumparea > 2)
                {
                    for (int i = _data.bumparea - 2; i < _data.bumparea + 2; i++)
                    {
                        foreach (Entity item in MenuScene.bumpEntities[i])
                        {
                            if (item.EntID != _data.owner.EntID)
                            {
                                Collision(item, _data);
                            }
                        }
                    }
                }
                else if (_data.bumparea == 1)
                {
                    for (int i = _data.bumparea - 1; i < _data.bumparea + 2; i++)
                    {
                        foreach (Entity item in MenuScene.bumpEntities[i])
                        {
                            if (item.EntID != _data.owner.EntID)
                            {
                                Collision(item, _data);
                            }
                        }
                    }
                }
                else if (_data.bumparea == 0)
                {
                    for (int i = _data.bumparea; i < _data.bumparea + 2; i++)
                    {
                        foreach (Entity item in MenuScene.bumpEntities[i])
                        {
                            if (item.EntID != _data.owner.EntID)
                            {
                                Collision(item, _data);
                            }
                        }
                    }
                }
            }
        }

在这里少了一个“=”,那么造成处在2区域时(整个地图被纵向分割成若干块)就会不检测,于是出现了上述的Bug。其实上面的描述,是因为人物被攻击前处在第三块,被攻击后正好跌入了第二块,于是攻击不再起作用了。

posted @ 2010-05-24 13:50  向恺然  阅读(149)  评论(0编辑  收藏  举报

我必须说的是:我崇尚开源,但鄙视剽窃。本博客所有引用的图片,文章,和代码,均只作为研究学习使用,不作为商业应用。如果我无意中冒犯了您,请发消息留言,我将立即删除。