J2ME平台A-RPG游戏怪物寻路算法初探

原创 2006年05月18日 18:12:00

            最近似乎在手机上A-RPG游戏很受欢迎,当然,我最近也在帮公司写一款A-RPG类的游戏。以前从没写过这样的游戏,从有到无的写出来了。也碰到不少问题,包括屏幕滚动时地图title数组索引的校验、整个游戏框架的搭建、地图数据的处理、分层的处理、主角技能的处理、碰状检测。

           这些问题有空我会做为小专题一个一个的写出来,这个话题里我们来一起讨论下A-RPG游戏里怪物寻路算法的确定。

          很显然,在手机这样的设备上,A*算法不适合。因为A*中大量的节点会把手机内存爆掉,这个是我直观的感觉,没亲自去实践,如果有人能在手机上精确的实现了A*算法的话,请告诉我一声。

        那么,在J2ME里该如何处理怪物寻路算法呢?

       我在这个游戏里用的是A*算法的简化版本,暂时称其为A* Simple算法。

      我们可以建立一个怪物的类,这个类里包括不同版本的怪物、相应的图片、相应的寻路算法、相应的攻击技能、相应的碰撞检测等。如果不建立这个类的话,实在很难想象这个游戏到后期如何扩展。

      那么我们就可以在这个类里面做如下的判断:

if(!walking){
      if(spriteX < theRoleX&&spriteY > theRoleY)
      {
        direction = 3;
        walking = true;
        drawByDirection(g,spriteImage,spriteX,spriteY,direction*3);
      }else if(spriteX < theRoleX&&spriteY < theRoleY)
      {
        direction = 2;
        walking = true;
        drawByDirection(g,spriteImage,spriteX,spriteY,direction*3);
      }else if(spriteY < theRoleY&&spriteX > theRoleX)
      {
        direction = 0;
        walking = true;
        drawByDirection(g,spriteImage,spriteX,spriteY,direction*3);
      }else if(spriteY > theRoleY&&spriteX > theRoleX)
      {
        direction = 1;
        walking = true;
        drawByDirection(g,spriteImage,spriteX,spriteY,direction*3);
      }else if(theRoleX-spriteX > 8+spriteWidth&&spriteY == theRoleY)
      {
        direction = 2;
        walking = true;
        drawByDirection(g,spriteImage,spriteX,spriteY,direction*3);
      }else if(theRoleX-spriteX <= 8+spriteWidth&&spriteY == theRoleY&&theRoleX-spriteX>0)
      {
        spriteX = theRoleX - 8 - spriteWidth;
        attackFlash(g,2);
      }else if(spriteX-theRoleX > 8+spriteWidth&&spriteY == theRoleY)
      {
        direction = 1;
        walking = true;
        drawByDirection(g,spriteImage,spriteX,spriteY,direction*3);
      }else if(spriteX-theRoleX <= 8+spriteWidth&&spriteY == theRoleY&&spriteX>theRoleX)
      {
        spriteX = theRoleX+8+spriteWidth;
        attackFlash(g,1);
      }
      else if(spriteY-theRoleY > spriteHeight&&spriteX == theRoleX)
      {
        direction = 3;
        walking = true;
        drawByDirection(g,spriteImage,spriteX,spriteY,direction*3);
      }else if(spriteY-theRoleY <= spriteHeight&&spriteX == theRoleX&&spriteY-theRoleY > 0)
      {
        spriteY = theRoleY+spriteHeight;
        attackFlash(g,3);
      }else if(theRoleY-spriteY > height&&spriteX == theRoleX)
      {
        direction = 0;
        walking = true;
        drawByDirection(g,spriteImage,spriteX,spriteY,direction*3);
      }else if(theRoleY-spriteY <= height&&spriteX == theRoleX)
      {
        spriteY = theRoleY-height;
        attackFlash(g,0);
      }

     在这个寻路算法中,怪物类会先判断“权值”,即横向和竖向到目标地的距离的大小。

    然后根据“权值”做出相应的动作。

   比如,怪物如果在主角的左下方,那么它会先逼近主角的正下方,然后从下方逼近主角。

   当然,这个算法可以写的更精确写,那要以牺牲性能为代价了。

   如何在精确和性能上做出平衡,也是我所要寻找的。

   欢迎有类似经验的同行一起讨论。

spritex工具的使用方法

转载地址:  http://star.kid-game.cn/forum.php?mod=viewthread&tid=47373 应该很多朋友都知道了SpriteX是J2ME下的一个游戏人...

J2ME平台的的RPG游戏开发历程(1)-盘古开天辟地,j2me创造游戏世界

J2ME平台的的RPG游戏开发历程(1) 本人并非从事开发行业,编程是我的业余爱好。接触编程3个年头,但实质上,学到的东西很少,只因自身悟性太低和毅力不够。 着实只是一只超级小小菜鸟。 各位看官...

J2ME游戏移植到Android平台的方法

本文主要介绍如何把J2ME游戏移植到Android平台的方法,如果你是个J2ME的游戏开发者,并且想把一些J2ME游戏快速地迁移到Android平台,那么相信本文会对你有所帮助。当然,如果您非说可以安...

如何把J2ME游戏移植到Android平台的方法

介绍如何把J2ME游戏移植到Android平台的方法,如果你是个J2ME的游戏开发者,并且想把一些J2ME游戏快速地迁移到Android平台,那么相信本文会对你有所帮助。当然,如果您非说可以安装个JV...

J2ME游戏移植OPhone平台要点

J2ME游戏移植OPhone平台要点   手机游戏是目前深受广大手机用户喜爱的一种娱乐软件,各大运营商都有自己的手机游戏平台,比如中国移动的百宝箱,MM平台,当然,除了运营商之外,类似QQ游戏平台...

如何把J2ME游戏移植到Android平台

如何把J2ME游戏移植到Android平台

j2me编写手机RPG游戏

  • 2010年05月30日 15:15
  • 4.29MB
  • 下载

J2ME RPG游戏解析

  • 2013年03月20日 15:40
  • 1.82MB
  • 下载

初探J2ME之一

最近在看一个关于J2ME的英语游戏项目,由于没有什么经验,所以做一些学习记录。 1.认识JAD文件。  首先,介绍什么是JAD文件。JAD是Java 应用程序描述符。JAD文件是软件配置的信息文件...

J2ME手机RPG游戏

  • 2010年01月15日 01:11
  • 128KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2ME平台A-RPG游戏怪物寻路算法初探
举报原因:
原因补充:

(最多只允许输入30个字)