雄无敌在线--战场第四章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