/// <summary> /// 重绘可见窗口内的地图元素 /// </summary> protected override void ReDraw() { Graphics canvas = Graphics.FromImage(MapViewPic); //计算要绘制的坐标范围 CoordRange paintRange = new CoordRange(View.PaintWindow, CurFloorNode.FloorSize); //填充全景地图 if (View.Shaked) { Graphics.FromImage(WindowFace).Clear(Color.Black); } //绘制地表 DrawBackground(canvas, paintRange); //绘制地图 DrawMap(canvas, paintRange); //绘制指引指针 if (GuidePoint.Exist) { GuidePoint.Draw(canvas); } //绘制视口上的图像到窗口地图 Graphics.FromImage(WindowFace).DrawImage(MapViewPic, FrmMain.DesWindow, View.PaintWindow, GraphicsUnit.Pixel); }
/// <summary> /// 绘制地表 /// </summary> /// <param name="canvas">画布</param> /// <param name="paintRange">绘制范围</param> private void DrawBackground(Graphics canvas, CoordRange paintRange) { for (int i = paintRange.startPos.Row; i < paintRange.endPos.Row; i++) { for (int j = paintRange.startPos.Col; j < paintRange.endPos.Col; j++) { canvas.DrawImage(MotaImage.BackImage, Common.GetPointFromCoord(j, i)); } } }
/// <summary> /// 绘制地图 /// </summary> /// <param name="canvas">画布</param> /// <param name="paintRange">绘制范围</param> private void DrawMap(Graphics canvas, CoordRange paintRange) { for (int i = paintRange.startPos.Row; i < paintRange.endPos.Row; i++) { for (int j = paintRange.startPos.Col; j < paintRange.endPos.Col; j++) { CurFloorNode.Draw(canvas, new Coord(j, i)); } //在人物出现的那一行绘制人物,实现覆盖效果 if (CurHero.Station.Row == i) { CurHero.Draw(canvas); } } }