雄无敌在线--战场第四章133地图
//测试目的:1.验证程序有效性 2.调整RecoupGrid使符合情况
//以下常数是测量得出,因每个图是不一定一样的
// MapDown 和 MapLeft 的测试留待您来参与,呵呵
const MapUpper = "057,003"
const MapRight = "066,005"
const OriginPos = "510,380"
const MapXoffset = "32,16"
const MapYoffset = "-32,16"
const RecoupGrid = "7,9"
Dim Str
Dim TestPos
//上边界边界补偿测试
TestPos = "057,008"
Str = "以下为上框边界补偿测试:" & vbCrlf
Str = Str & "地图坐标{"&TestPos&"}到上框点["&MapUpper&"]的距离为:"
Str = Str & Offset( MapUpper, TestPos, MapXoffset, MapYoffset ) & vbCrlf
Str = Str & "原来的屏幕坐标为:{"&OriginPos&"},边界补偿后的屏幕坐标为:"
Str = Str & GetOriginPos( TestPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset, MapUpper, ",", ",", MapRight ) & vbCrlf
MessageBox Str
TestPos = "074,019"
//右边界边界补偿测试
Str = "以下为右框边界补偿测试:" & vbCrlf
Str = Str & "地图坐标{"&TestPos&"}到右框点["&MapRight&"]的距离为:"
Str = Str & Offset( MapRight, TestPos, MapXoffset, MapYoffset ) & vbCrlf
Str = Str & "原来的屏幕坐标为:{"&OriginPos&"},边界补偿后的屏幕坐标为:"
Str = Str & GetOriginPos( TestPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset, MapUpper, ",", ",", MapRight ) & vbCrlf
MessageBox Str
TestPos = "060,005"
//上/右边界混合边界补偿测试
Str = "以下为混合边界补偿测试:" & vbCrlf
Str = Str & "地图坐标{"&TestPos&"}到上框点["&MapUpper&"]的距离为:"
Str = Str & Offset( MapUpper, TestPos, MapXoffset, MapYoffset ) & vbCrlf
Str = Str & "地图坐标{"&TestPos&"}到右框点["&MapRight&"]的距离为:"
Str = Str & Offset( MapRight, TestPos, MapXoffset, MapYoffset ) & vbCrlf
Str = Str & "原来的屏幕坐标为:{"&OriginPos&"},边界补偿后的屏幕坐标为:"
Str = Str & GetOriginPos( TestPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset, MapUpper, ",", ",", MapRight ) & vbCrlf
MessageBox Str
EndScript
Function GetOriginPos( MapPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset, MapUpper, MapDown, MapLeft, MapRight )
//制作人员:xxchuchu
//制作时间:2011.01.09
//功能说明:[英雄无敌在线]中,从游戏[地图坐标]换算屏幕坐标时,返回经过[边界补偿]的屏幕坐标
// 其中参数 MapPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset 必须
// MapUpper, MapDown, MapLeft, MapRight 没有的用 "," 代入
//参数说明:
//GetOriginPos 返回值,OriginPos加上补偿值后的坐标,格式:X,Y 字符型
//MapPos 需要计算的[地图坐标],格式: X,Y 字符型
//OriginPos 正常的人物[屏幕当前坐标],格式:X,Y 字符型
//RecoupGrid 需要补偿的格子范围,格式: RecoupX,RecoupY 字符型
//MapXoffset 游戏坐标X+1时屏幕坐标位移值,格式:X,Y 字符型
//MapYoffset 游戏坐标Y+1时屏幕坐标位移值,格式:X,Y 字符型
//MapUpper 游戏画面边界上边界的任一点,格式:X,Y 字符型
//MapDown 游戏画面边界下边界的任一点,格式:X,Y 字符型
//MapLeft 游戏画面边界左边界的任一点,格式:X,Y 字符型
//MapRight 游戏画面边界右边界的任一点,格式:X,Y 字符型
Dim MyArray, XOrigin, YOrigin, RecoupX, RecoupY
Dim Xoffset, Yoffset, Ystep, Xstep
//假定游戏显示坐标不能为负数
If InStr( MapPos, "-" ) Then
GetOriginPos = OriginPos
Goto EndOfFun
End If
//记录原始的屏幕坐标
MyArray = Split( OriginPos, "," )
XOrigin = CInt( MyArray(0) )
YOrigin = CInt( MyArray(1) )
//记录需要补偿的X/Y的格子数
MyArray = Split( RecoupGrid, "," )
RecoupX = CInt( MyArray(0) )
RecoupY = CInt( MyArray(1) )
//上框补偿计算开始,这里是把Y轴向上推
If MapUpper <> "," and InStr( MapUpper, "," ) Then
MyArray = split( MapXoffset, "," )
Ystep = MyArray(1)
MyArray = Split( Offset( MapUpper, MapPos, MapXoffset, MapYoffset ), "," )
Xoffset = CInt( MyArray(0) )
Yoffset = CInt( MyArray(1) )
If Abs(Yoffset) <= Abs( Ystep * RecoupX ) Then
//具体怎么补偿,需要看不同游戏自己分析一下
YOrigin = YOrigin - ( Abs( Ystep * RecoupX ) - Abs( Yoffset ) )
End If
End If
//下框补偿计算开始,这里是把Y轴向下推
If MapDown <> "," and InStr( MapDown, "," ) Then
MyArray = split( MapXoffset, "," )
Ystep = MyArray(1)
MyArray = Split( Offset( MapDown, MapPos, MapXoffset, MapYoffset ), "," )
Xoffset = CInt( MyArray(0) )
Yoffset = CInt( MyArray(1) )
If Abs(Yoffset) <= Abs( Ystep * RecoupX ) Then
//具体怎么补偿,需要看不同游戏自己分析一下
YOrigin = YOrigin + ( Abs( Ystep * RecoupX ) - Abs( Yoffset ) )
End If
End If
//左框补偿计算开始,这里是把X轴向右推
If MapLeft <> "," and InStr( MapLeft, "," ) Then