按键精灵游戏开发教程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

按键精灵游戏开发教程

来源:按键学院【按键精灵】

渐开线找怪是一种高效率的找怪方法,以角色为中心点,向外扩散,找离角色最近的怪物。

渐开线

画渐开线重要的几个点:

1、起始点坐标

2、线与线之间的距离。

3、转向。

4、线长。(上图中,渐开线并不是一口气画完的,是一段线一段线的画。)

游戏里的规律

咱们今天讲的例子是2D游戏《神涂》。渐开线要怎么应用到游戏找怪呢?

咱们先了解下游戏里的规律,再将渐开线套用进去。

规律1:

在2D游戏里,角色、怪物移动的距离是固定的,就像走在棋盘里一样,移动一步就像走了一个格子。

在今天的游戏例子中,角色、怪物横着走一步是48个像素点,竖着走一步是32个像素点。(不是所有2D游戏都是这样的规格)

那么,如何知道一步的距离是多少呢?

我们可以获取角色血条的第一个像素点坐标,然后向上移动一步,再次获取血条第一个像素点坐标。y坐标的差值,即是竖走一步的距离,用同样的方法,横走一步即可获得横走一步的距离

规律2:

离角色越近的怪物,格子的圈数越少。

经过图片的分析,情况一目了然。

以角色为中心,一圈圈往外扩散,不正是渐开线么。

渐开线找怪思路

1、以角色右边一格为渐开线起始点,一圈圈往外遍历格子。(不一定要角色右边一格为起始点,上下左右都可以,不要以角色为起点即可。因为咱们的角色血条也是红的,如果从角色那一格开始遍历,那么一开始就找到角色自己的血条。)

2、遍历到第26个格子的时候发现怪物,角色移动过去打怪。打完怪物之后,以当前角色所在位置的右边一格为起始点,再次开始渐开线找怪。

例如:渐开线是8圈,遍历了8圈格子,其中第三圈和第五圈都有怪物。

遍历到第三圈找到怪物,角色移动到怪物点打完怪。

剩下的五圈继续遍历扩散,但不判断有没有怪物。

为什么不判断呢?

因为,打完第一只怪物之后,角色的位置变化了,

我们不能肯定,第五圈的那只怪物和当前角色所在位置的距离是最近的。步骤

1、我们已经知道,一个格子宽48像素,高32像素。

第一步,以角色右边一格为渐开线起始点,也就是说x坐标要加48个像素。

以角色为中心点,往上移动y坐标递减,往下移动y坐标递增。往左移动x坐标递减,往右移动x坐标递增。

2、第1个格子到第二个格子,y坐标加32个像素。现在问题来了,第2格到第3个要转弯,怎么转弯呢?

咱们上面提到过:

以角色为中心点,往上移动y坐标递减,往下移动y坐标递增。往左移动x坐标递减,往右移动x坐标递增。

也就是说:如果我们想往上走一个格子,那么x坐标不变,y坐标减少32像素。

如果想往左走,那么y坐标不变,x坐标减少48像素,依此类推。

3、现在我们知道了转向的原理,那么走几格需要转向?要怎么控制?我们来看下图片分析:

结合代码进行理解:

步数= 1

For 16 //这里的数字越大,渐开线范围越大

For 2

//转向

For 步数

Next

Next

步数= 步数+ 1

Next

初始步数为1,

for 2 循环有循环两次。

第一次,角色转向进入for 步数循环往右走一格(上图中白色格子)。

第二次,角色转向进入for 步数循环往下走一格。

for 2循环执行完毕,步数加1

再次进入for 2 循环。

第一次,角色转向进入for 步数循环往左走两格(上图中嫩绿色格子)。

第二次,角色转向进入for 步数循环往上走两格。

for 2循环执行完毕,步数加1

再次进入for 2 循环。

依此类推。

整体代码

Call 随机打怪()

Function 随机打怪()

px = 497 - 9

py = 279 - 15

//497,279为角色血条的第一个像素点

'/* 渐开找怪

Do

坐标X = 0

坐标Y = 0

朝向=0 // [0=上、1=右、2=下、3=左]

步数= 1

有怪= false

For 16

For 2

朝向= 朝向+ 1

For 步数

Select Case Abs(朝向mod 4)

Case 0

坐标Y = 坐标Y - 1

Case 1

坐标X = 坐标X + 1

Case 2

坐标Y = 坐标Y + 1

Case 3

坐标X = 坐标X - 1

End Select

If 有怪= False Then

XY = Plugin.Color.FindMultiColor(px + (坐标x * 48), py + (坐标y * 32), px + ((坐标x + 1) * 48), py + ((坐标y + 1) * 32), "FF0000", "0|1|9C0000", 1)

ZB = InStr(XY, "|")

intX = Clng(Left(XY, ZB - 1)): intY = Clng(Right(XY, Len(XY) - ZB))

If IntX >= 0 Then

MoveTo IntX + 16, IntY + 46

LeftClick 1

有怪= TRUE

End If

End If

Next

Next

步数= 步数+ 1

Next

Delay 1000

// 判断是否要使用随机传送了

If 有怪= False Then

KeyPress "3",1

Delay 1000

End If

相关文档
最新文档