1. 注释:测试环境:英雄无敌在线--战场第四章133地图
  2. 注释:测试目的:1.验证程序有效性 2.调整RecoupGrid使符合情况
  3. 注释:以下常数是测量得出,因每个图是不一定一样的
  4. 注释: MapDown 和 MapLeft 的测试留待您来参与,呵呵
  5. 定义常量 MapUpper = "057,003"
  6. 定义常量 MapRight = "066,005"
  7. 定义常量 OriginPos = "510,380"
  8. 定义常量 MapXoffset = "32,16"
  9. 定义常量 MapYoffset = "-32,16"
  10. 定义常量 RecoupGrid = "7,9"
  11. 定义变量 Str
  12. 定义变量 TestPos
  13. 注释:上边界边界补偿测试
  14. 令 TestPos = "057,008"
  15. 令 Str = "以下为上框边界补偿测试:" & vbCrlf
  16. 令 Str = Str & "地图坐标{" & TestPos & "}到上框点[" & MapUpper & "]的距离为:"
  17. 令 Str = Str & Offset(MapUpper,TestPos,MapXoffset,MapYoffset) & vbCrlf
  18. 令 Str = Str & "原来的屏幕坐标为:{" & OriginPos & "},边界补偿后的屏幕坐标为:"
  19. 令 Str = Str & GetOriginPos(TestPos,OriginPos,RecoupGrid,MapXoffset,MapYoffset,MapUpper,",",",",MapRight) & vbCrlf
  20. 弹出窗口 Str
  21. 令 TestPos = "074,019"
  22. 注释:右边界边界补偿测试
  23. 令 Str = "以下为右框边界补偿测试:" & vbCrlf
  24. 令 Str = Str & "地图坐标{" & TestPos & "}到右框点[" & MapRight & "]的距离为:"
  25. 令 Str = Str & Offset(MapRight,TestPos,MapXoffset,MapYoffset) & vbCrlf
  26. 令 Str = Str & "原来的屏幕坐标为:{" & OriginPos & "},边界补偿后的屏幕坐标为:"
  27. 令 Str = Str & GetOriginPos(TestPos,OriginPos,RecoupGrid,MapXoffset,MapYoffset,MapUpper,",",",",MapRight) & vbCrlf
  28. 弹出窗口 Str
  29. 令 TestPos = "060,005"
  30. 注释:上/右边界混合边界补偿测试
  31. 令 Str = "以下为混合边界补偿测试:" & vbCrlf
  32. 令 Str = Str & "地图坐标{" & TestPos & "}到上框点[" & MapUpper & "]的距离为:"
  33. 令 Str = Str & Offset(MapUpper,TestPos,MapXoffset,MapYoffset) & vbCrlf
  34. 令 Str = Str & "地图坐标{" & TestPos & "}到右框点[" & MapRight & "]的距离为:"
  35. 令 Str = Str & Offset(MapRight,TestPos,MapXoffset,MapYoffset) & vbCrlf
  36. 令 Str = Str & "原来的屏幕坐标为:{" & OriginPos & "},边界补偿后的屏幕坐标为:"
  37. 令 Str = Str & GetOriginPos(TestPos,OriginPos,RecoupGrid,MapXoffset,MapYoffset,MapUpper,",",",",MapRight) & vbCrlf
  38. 弹出窗口 Str
  39. 脚本停止运行
  40. 函数 GetOriginPos(MapPos,OriginPos,RecoupGrid,MapXoffset,MapYoffset,MapUpper,MapDown,MapLeft,MapRight)
  41.     注释:制作人员:xxchuchu
  42.     注释:制作时间:2011.01.09
  43.     注释:功能说明:[英雄无敌在线]中,从游戏[地图坐标]换算屏幕坐标时,返回经过[边界补偿]的屏幕坐标
  44.     注释: 其中参数 MapPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset 必须
  45.     注释: MapUpper, MapDown, MapLeft, MapRight 没有的用 "," 代入
  46.     注释:参数说明:
  47.     注释:GetOriginPos 返回值,OriginPos加上补偿值后的坐标,格式:X,Y 字符型
  48.     注释:MapPos 需要计算的[地图坐标],格式: X,Y 字符型
  49.     注释:OriginPos 正常的人物[屏幕当前坐标],格式:X,Y 字符型
  50.     注释:RecoupGrid 需要补偿的格子范围,格式: RecoupX,RecoupY 字符型
  51.     注释:MapXoffset 游戏坐标X+1时屏幕坐标位移值,格式:X,Y 字符型
  52.     注释:MapYoffset 游戏坐标Y+1时屏幕坐标位移值,格式:X,Y 字符型
  53.     注释:MapUpper 游戏画面边界上边界的任一点,格式:X,Y 字符型
  54.     注释:MapDown 游戏画面边界下边界的任一点,格式:X,Y 字符型
  55.     注释:MapLeft 游戏画面边界左边界的任一点,格式:X,Y 字符型
  56.     注释:MapRight 游戏画面边界右边界的任一点,格式:X,Y 字符型
  57.     定义变量 MyArray, XOrigin, YOrigin, RecoupX, RecoupY
  58.     定义变量 Xoffset, Yoffset, Ystep, Xstep
  59.     注释:假定游戏显示坐标不能为负数
  60.     如果 InStr(MapPos,"-") 则
  61.         令 GetOriginPos = OriginPos
  62.         跳转到标记 EndOfFun(函数 GetOriginPos)
  63.     条件结束
  64.     注释:记录原始的屏幕坐标
  65.     令 MyArray = Split(OriginPos,",")
  66.     令 XOrigin = CInt(MyArray(0))
  67.     令 YOrigin = CInt(MyArray(1))
  68.     注释:记录需要补偿的X/Y的格子数
  69.     令 MyArray = Split(RecoupGrid,",")
  70.     令 RecoupX = CInt(MyArray(0))
  71.     令 RecoupY = CInt(MyArray(1))
  72.     注释:上框补偿计算开始,这里是把Y轴向上推
  73.     如果 MapUpper <> "," 并且 InStr(MapUpper,",") 则
  74.         令 MyArray = split(MapXoffset,",")
  75.         令 Ystep = MyArray(1)
  76.         令 MyArray = Split(Offset(MapUpper,MapPos,MapXoffset,MapYoffset),",")
  77.         令 Xoffset = CInt(MyArray(0))
  78.         令 Yoffset = CInt(MyArray(1))
  79.         如果 Abs(Yoffset) <= Abs(Ystep * RecoupX) 则
  80.             注释:具体怎么补偿,需要看不同游戏自己分析一下
  81.             令 YOrigin = YOrigin - (Abs(Ystep * RecoupX) - Abs(Yoffset))
  82.         条件结束
  83.     条件结束
  84.     注释:下框补偿计算开始,这里是把Y轴向下推
  85.     如果 MapDown <> "," 并且 InStr(MapDown,",") 则
  86.         令 MyArray = split(MapXoffset,",")
  87.         令 Ystep = MyArray(1)
  88.         令 MyArray = Split(Offset(MapDown,MapPos,MapXoffset,MapYoffset),",")
  89.         令 Xoffset = CInt(MyArray(0))
  90.         令 Yoffset = CInt(MyArray(1))
  91.         如果 Abs(Yoffset) <= Abs(Ystep * RecoupX) 则
  92.             注释:具体怎么补偿,需要看不同游戏自己分析一下
  93.             令 YOrigin = YOrigin + (Abs(Ystep * RecoupX) - Abs(Yoffset))
  94.         条件结束
  95.     条件结束
  96.     注释:左框补偿计算开始,这里是把X轴向右推
  97.     如果 MapLeft <> "," 并且 InStr(MapLeft,",") 则
  98.         令 MyArray = split(MapYoffset,",")
  99.         令 Xstep = MyArray(0)
  100.         令 MyArray = Split(Offset(MapLeft,MapPos,MapXoffset,MapYoffset),",")