`
totoxian
  • 浏览: 1080447 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

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

阅读更多

最近似乎在手机上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);
}

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

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

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

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

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

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

分享到:
评论

相关推荐

    j2me----api

    j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api

    j2me--手机游戏寻经算法

    "j2me--手机游戏寻经算法"这个主题聚焦于游戏中的一个重要技术环节——路径查找算法,它是让游戏中的敌人角色能够在不同图层之间有效地找到并追踪英雄的关键。这种算法对于游戏的动态性和趣味性至关重要。 路径查找...

    j2me版A星寻路算法

    综上所述,J2ME版A星寻路算法是移动游戏开发中的重要工具,它利用了启发式方法来快速找到最优路径,同时在资源有限的J2ME环境中进行了适当的优化,确保了在RPG等类型游戏中实现流畅的自动寻路功能。

    J2ME设计--手机游戏黑白棋

    综上所述,这篇论文详细阐述了利用J2ME技术设计手机游戏黑白棋的全过程,从需求分析、算法设计到代码实现和测试,全方位展示了手机游戏开发的技术要点,对于理解和实践J2ME编程具有一定的指导价值。

    J2ME---游戏共享

    "J2ME---游戏共享"的主题意味着这个压缩包中包含了多个由J2ME开发的经典游戏示例。这些游戏可能包括移植自其他平台的知名作品,或者是专门为J2ME平台设计的原创游戏。文件名中的各个游戏如下: 1. **壮志凌云.rar**...

    J2ME游戏源码---泡泡堂

    【J2ME游戏源码---泡泡堂】是一个适合初学者和有一定基础的开发者研究的游戏项目,主要用于学习J2ME(Java Micro Edition)平台上的游戏开发技术。J2ME是Java平台的一个子集,专为资源有限的移动设备如手机、PDA等...

    j2me_cldc-1_1-fcs-src-unix.zip

    J2ME,全称为Java 2 Micro Edition,是Java平台的一个子集,专为资源有限的嵌入式设备设计,如移动电话、智能卡和消费电子设备等。在J2ME体系中,Connected Limited Device Configuration(CLDC)是一个重要的组成...

    j2me_cldc-1_1-fcs-src-winunix.zip_j2me cldc_j2me_cldc_j2me_cldc-

    Java 2 Micro Edition (J2ME) 是一个用于开发小型设备和嵌入式系统的 Java 平台,如手机、智能电器、游戏机等。CLDC(Connected Limited Device Configuration)是 J2ME 的一部分,专为资源有限的设备设计。这个...

    J2ME游戏源码---bubble breaker

    Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发在移动设备、嵌入式系统等资源有限的环境中的应用程序,特别是手机游戏。"J2ME游戏源码---bubble breaker"是一个基于J2ME的游戏项目,它是一个经典...

    J2ME手机游戏--数独

    J2ME手机游戏--数独

    j2me游戏--黑白棋

    "j2me游戏--黑白棋"这个标题揭示了我们正在讨论的是一个基于Java 2 Micro Edition (J2ME)平台开发的黑白棋游戏。J2ME是Java的一个子集,专为资源有限的设备如移动电话、智能手表等设计,用于创建移动应用程序,包括...

    j2me版本A*四向寻路算法

    A*四向寻路算法在J2ME中的实现意味着它只考虑了四个基本方向:上、下、左、右,而不是八向(包括对角线)寻路,这样可以减少计算复杂度,提高性能。 A*算法的核心在于其使用了启发式函数(通常为曼哈顿距离或...

    funambol-j2me-api-6.5.1000.zip_PIM_phone_pim java

    1. "funambol-j2me-common-6.5.10.zip":这是Funambol J2ME平台的通用组件,包含了各种基础类和工具,它们为PIM数据处理提供了一般性的支持。这些通用组件可能包括网络通信、数据编码解码、错误处理等功能,为整个...

    j2me源程序--空战游戏

    在移动设备技术发展初期,J2ME(Java 2 Micro Edition)是开发手机应用的主流平台,尤其是对于游戏开发者来说,它提供了一个跨平台的编程环境。本篇将深入探讨一款基于J2ME的空战游戏,通过对源代码的分析,来揭示其...

    j2me版A寻路算法

    A*(发音为 "A-star")寻路算法是一种在图形和游戏开发中广泛使用的路径查找算法,尤其在有限的网格环境中,如地图导航、游戏关卡设计等。该算法结合了Dijkstra算法的最短路径特性以及启发式搜索的优势,以更高效的...

    j2me版A*寻路算法

    J2ME(Java Micro Edition)是Java平台的一个版本,主要用于移动设备和嵌入式系统,因此将A*算法应用于J2ME可以帮助创建智能导航或策略游戏等应用。 A*算法的核心在于它使用了一个评估函数来衡量从起点到目标点的...

    j2me 手机游戏-跑跑卡丁车

    《j2me手机游戏-跑跑卡丁车》是一款基于Java ME(J2ME)平台开发的移动设备上的赛车竞速游戏。Java ME是Oracle公司为小型设备和嵌入式设备提供的一种轻量级的Java应用程序环境,它使得开发者能够为手机、智能手表等...

    j2me游戏--洼地小子源码

    洼地小子是一款基于J2ME平台的经典小游戏,深受玩家喜爱。J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,专门用于嵌入式设备和移动设备的开发,如早期的手机和PDA。在本文中,我们将深入探讨这款游戏的...

    J2ME_Loader-1.7.7-open-release.apk

    J2ME_Loader-1.7.7-open-release.apk

Global site tag (gtag.js) - Google Analytics