大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)


免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!

猫咪迷宫和A*概述

正如你所看到的,现在当你在地图某处触摸的时候,猫咪将会跳到你触摸方向的相邻瓦格中去.

我们想要修改为猫咪连续移动直到你点击的位置,就像一些RPG或者点击的探险游戏一样.

让我们看一下当前触摸处理代码是如何工作的.如果你打开HelloWorldLayer,你将发现其像下面代码一样实现触摸回调:

- (void)registerWithTouchDispatcher {[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {if (_gameOver) return NO;CGPoint touchLocation = [_tileMap convertTouchToNodeSpace:touch];[_cat moveToward:touchLocation];return YES;
}

你可以看到它仅仅调用了cat sprite中的一个方法,让猫咪在地图上朝着触摸的点方向去移动.

所以我们将去修改CatSprite.m中的以下方法去找寻到目的点的最短路径,如下所示:

- (void)moveToward:(CGPoint)target {// Figure out the shortest path to the target, and start following it!
}

创建ShortestPathStep类

让我们从创建一个描述路径中的step的内部类中开始.在我们的例子中,这是一个瓦块,并且它的F,G和H分值都由A*算法来计算.

So添加以下代码到CatSprite.m的开头(在CatSprite的@implementation之上):

// A class that represents a step of the computed path
@interface ShortestPathStep : NSObject
{CGPoint position;int gScore;int hScore;ShortestPathStep *parent;
}@property (nonatomic, assign) CGPoint position;
@property (nonatomic, assign) int gScore;
@property (nonatomic, assign) int hScore;
@property (nonatomic, assign) ShortestPathStep *parent;- (id)initWithPosition:(CGPoint)pos;
- (int)fScore;@end

正如你所见的,这是一个非常简单的类,其中跟踪保存了以下内容:

  • 瓦块的坐标
  • 分值G(注意,在这里是开始到当前位置的瓦片个数)
  • 分值H(注意,在这里它是当前到结束位置估计的瓦块数量)
  • ShortestPathStep来自哪里
  • 分值F,就是该瓦块的分值(用F + G来计算).

现在我们可以在CatSprite.m最后(在@end下面)写出实现代码:

@implementation ShortestPathStep@synthesize position;
@synthesize gScore;
@synthesize hScore;
@synthesize parent;- (id)initWithPosition:(CGPoint)pos
{if ((self = [super init])) {position = pos;gScore = 0;hScore = 0;parent = nil;}return self;
}- (NSString *)description
{return [NSString stringWithFormat:@"%@  pos=[%.0f;%.0f]  g=%d  h=%d  f=%d", [super description], self.position.x, self.position.y, self.gScore, self.hScore, [self fScore]];
}- (BOOL)isEqual:(ShortestPathStep *)other
{return CGPointEqualToPoint(self.position, other.position);
}- (int)fScore
{return self.gScore + self.hScore;
}@end

正如你看到的那样,其内容非常直截了当.我们在这里重新定义了description方法,为的是更容易去调试,并且创建了一个isEqual方法,因为2个ShortestPathStep只有在它们的posititon相同时才相同(比如:它们表示同一个瓦块).

如何在Cocos2D游戏中实现A*寻路算法(二)相关推荐

  1. 如何在Cocos2D游戏中实现A*寻路算法(五)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  2. 如何在Cocos2D游戏中实现A*寻路算法(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  3. 如何在Cocos2D游戏中实现A*寻路算法(七)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  4. 即时战略游戏中实用的寻路算法分享

    http://www.gameres.com/340777.html GameRes游资网授权发布,文 / 伍一峰 RTS中的寻路系统一般需要满足有以下几个条件: 1. 效率高,因为rts普遍地图大, ...

  5. 游戏中常用的寻路算法(6):地图表示

    在本系列文档大部分内容中,我都假设A*用于某种网格上,其中的"节点"是一个个网格的位置,"边"是从某个网格位置出发的各个方向.然而,A*可用于任意图形,不仅仅是 ...

  6. 【IOS】如何在cocos2d 游戏中添加 移动广告

    最近有需要在一款Cocos2d 游戏里面添加移动广告,大家都知道,现在有很多的移动广告平台,每个平台都有自己的SDK,每个SDK的方法,流程又都不一样,找来找去,找到了 果合移动广告. 它自己的网站上 ...

  7. 游戏中常用的寻路算法的分享(3):A*算法的实现

    概述 剥除代码,A* 算法非常简单.算法维护两个集合:OPEN 集和 CLOSED 集.OPEN 集包含待检测节点.初始状态,OPEN集仅包含一个元素:开始位置.CLOSED集包含已检测节点.初始状态 ...

  8. 游戏中常用的寻路算法的分享(4)处理移动中的障碍物

    一个寻路算法会计算出一条绕过静止障碍物的路径,但如果障碍物会移动呢?当一个单位移动到达某特定点时,原来的障碍物可能不在那点了,或者在那点上出现了新的障碍物.如果路线可以绕过典型的障碍物,那么只要使用单 ...

  9. 游戏中常用的寻路算法(5)预先计算好的路径的所用空间

    有时候,影响计算寻路路径的不是时间,而是计算路径所需的上百个单元格所占的空间.寻路是需要内存来运行寻路算法,还需要额外内存来存储寻到的路径.运行寻路算法(A*,开集或闭集)所需的临时空间经常会比存储这 ...

最新文章

  1. java.lang.NullPointerException异常原因及解决
  2. 8、clone使用和数组列表的copy
  3. anaconda安装成功测试_学习笔记120—Win10 成功安装Anaconda 【亲测有效,需注意几点!!!】...
  4. Terraform 开发指南
  5. VB.NET在线升级程序源代码,可以独立使用
  6. EXCHANGE虚拟目录功能介绍
  7. The jQuery HTML5 Audio / Video Library
  8. sqlserver 备份脚本
  9. Excel曲线拟合的精度问题
  10. “盗版微信”通过反编译手段与正版互联互通,团伙被判刑
  11. (1) 创建一个Customer ,名字叫 Jane Smith, 他有一个账号为1000,余额为2000元,年利率为 1.23% 的账户。 (2) 对Jane Smith操作。 存入 100 元,再
  12. 中国十大B2C电商网站开发语言调查
  13. python螺旋线-利用Python绘制一个正方形螺旋线
  14. javascript写的一个练习打字的小程序
  15. 三代测序的简介和原理
  16. 刷脸支付正在改变我们的生活方式
  17. ios中导入第三方类库
  18. 显示前半内容后半内容用省略号_作文写作指导:如何修改作文?
  19. submit()和execute()区别
  20. 无公网IP、实现企业微信自建应用

热门文章

  1. 储能逆变器配套智能电表
  2. zabbix部署安装
  3. 【网络安全之Web系列三】CentOS6.5基础
  4. 笔记本保养的一些误区你要注意了
  5. 自学python单片机编程-用Python语言控制单片机-可编程逻辑-与非网
  6. java double空值_Java Double NullPointerException
  7. led显示屏如何防老化
  8. 人体骨骼坐标在彩色图像中显示
  9. 吉他学习丨简谱——《小蜜蜂》、《送别》、《龙的传人》
  10. OpenCV for Android入门