开发日志-5.4

键盘值的查找:    

      在数据驱动的游戏里,用这样的结构存储着游戏的键盘操作表

      public   string[] StAction = new string[]{
               "R,idle",
               "J,wentdown",
               "A,frontWalk,30",
               "Space,jump",
               "U,fightOfFoot",
               "AAI,downRoll",
               "W,upWalk",
               "S,downWalk",
               "K,jumpCut",
               "D,backWalk,33"
        };

      由于左右映射的问题,需要把对应前进后退的两个键值找出来,如果如上面—— "A,frontWalk,30",这样的做法,把键值的Code作为数据保存起来,是可以实现的, 但每次都需要手动查找这个键盘值,如果这个值标错了,程序就会出错。所以上面的做法可以实现,但并不够好。

     记得在Wpf程序设计指南中看到过取得颜色表的例子,沿着这个思路,Property[] properties = typeof(Colors).GetProperties();但是并不存在Keys这样的类。所以这个思路也不行。

     在Enum这个类里有一个静态的方法Parse 方法,

     public static Object Parse(
Type enumType,
string value,
bool ignoreCase
)      可以把字符串转换为Key, _data.frontWalk =(Key) Enum.Parse(typeof(Key),key,true);这样问题得到了解决。

   但如果在反射的思路上深入深入,也应该是可以得到解决的。例如这样的方式:

            Type enumType = typeof(Key);
            FieldInfo[]  infos = enumType.GetFields(BindingFlags.Public | BindingFlags.Static);

反射是一个值得深入研究下去的课题。   

下面该是什么了?

      在问这个问题之前,需要提醒一下,因为游戏采取的是KeyUp—复原 的方式,所以单机操作两个人物的时候,会造成冲突,这是一个隐含的Bug,特别是单机双人对战的时候。

     接下来,应该是碰撞了。

     碰撞:最重要的当然是游戏人物之间的碰撞,具体细化一下:

   (1)攻击框--攻击框

   (2)攻击框--防守框

   (3)防守框--防守框。

    从碰撞的方向上来讲:LeftCollision,RightCollision,UpCollision,DownCollision,能区分碰撞的方向,这一点对于可以从某个方向穿越的东西来说是很重要的。

     既然是碰撞,就不是一个人的事情,俗话说的好“一个巴掌拍不响”,或许也不是两个人的事情,而是一个人和一群人的事情,更确切的说是每个人和某一群人的事情。这也就是说,碰撞检测要检测一群人,而这个人群是不断变化的,因为每个人都是在走动,有些人会很快地走到跟前,有的人会很快离开,如果能够清晰的辨别出来这样一个范围,也就降低了碰撞检测的数量。碰撞检测是在交叉影响着。将这样一个范围保存在哪里呢,以某人为中心保存一份自己的数据?还是将地图划分成很多的区域,去检测位于这些区域内的东西,如果是这样,还要和地图紧密地结合起来。


 

posted @ 2010-05-04 19:54  向恺然  阅读(161)  评论(0)    收藏  举报

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