/// <summary> /// 向目标移动 /// </summary> private void moveTo(long ticks) { if (ticks < moveEndTime) { return; } Point ownerGrid = owner.CurrentGrid; int nCurrX = (int)ownerGrid.X; int nCurrY = (int)ownerGrid.Y; Point targetGrid = target.CurrentGrid; int nTargetCurrX = (int)targetGrid.X; int nTargetCurrY = (int)targetGrid.Y; int nDir = (int)owner.Direction; if ((nCurrX != nTargetCurrX) || (nCurrY != nTargetCurrY)) { int nX = nTargetCurrX; int nY = nTargetCurrY; while (true) { if (nX > nCurrX) { nDir = (int)Dircetions.DR_RIGHT; if (nY > nCurrY) { nDir = (int)Dircetions.DR_UPRIGHT; } else if (nY < nCurrY) { nDir = (int)Dircetions.DR_DOWNRIGHT; } break; } if (nX < nCurrX) { nDir = (int)Dircetions.DR_LEFT; if (nY > nCurrY) { nDir = (int)Dircetions.DR_UPLEFT; } else if (nY < nCurrY) { nDir = (int)Dircetions.DR_DOWNLEFT; } break; } if (nY > nCurrY) { nDir = (int)Dircetions.DR_UP; break; } if (nY < nCurrY) { nDir = (int)Dircetions.DR_DOWN; break; } break; } owner.Direction = nDir; int nOldX = nCurrX; int nOldY = nCurrY; { ChuanQiUtils.RunTo1(owner, (Dircetions)nDir); } ownerGrid = owner.CurrentGrid; nCurrX = (int)ownerGrid.X; nCurrY = (int)ownerGrid.Y; for (int i = 0; i < 7; i++) { if (nOldX == nCurrX && nOldY == nCurrY) { if (Global.GetRandomNumber(0, 3) > 0) { nDir++; } else if (nDir > 0) { nDir--; } else { nDir = 7; } if (nDir > 7) { nDir = 0; } ChuanQiUtils.RunTo1(owner, (Dircetions)nDir); ownerGrid = owner.CurrentGrid; nCurrX = (int)ownerGrid.X; nCurrY = (int)ownerGrid.Y; } else { break; } } } moveEndTime = ticks + 600; }
private void moveTo(long ticks) { if (ticks >= this.moveEndTime) { Point ownerGrid = this.owner.CurrentGrid; int nCurrX = (int)ownerGrid.X; int nCurrY = (int)ownerGrid.Y; Point targetGrid = this.target.CurrentGrid; int nTargetCurrX = (int)targetGrid.X; int nTargetCurrY = (int)targetGrid.Y; int nDir = (int)this.owner.Direction; if (nCurrX != nTargetCurrX || nCurrY != nTargetCurrY) { int nX = nTargetCurrX; int nY = nTargetCurrY; if (nX > nCurrX) { nDir = 2; if (nY > nCurrY) { nDir = 1; } else if (nY < nCurrY) { nDir = 3; } } else if (nX < nCurrX) { nDir = 6; if (nY > nCurrY) { nDir = 7; } else if (nY < nCurrY) { nDir = 5; } } else if (nY > nCurrY) { nDir = 0; } else if (nY < nCurrY) { nDir = 4; } this.owner.Direction = (double)nDir; int nOldX = nCurrX; int nOldY = nCurrY; ChuanQiUtils.RunTo1(this.owner, (Dircetions)nDir); ownerGrid = this.owner.CurrentGrid; nCurrX = (int)ownerGrid.X; nCurrY = (int)ownerGrid.Y; for (int i = 0; i < 7; i++) { if (nOldX != nCurrX || nOldY != nCurrY) { break; } if (Global.GetRandomNumber(0, 3) > 0) { nDir++; } else if (nDir > 0) { nDir--; } else { nDir = 7; } if (nDir > 7) { nDir = 0; } ChuanQiUtils.RunTo1(this.owner, (Dircetions)nDir); ownerGrid = this.owner.CurrentGrid; nCurrX = (int)ownerGrid.X; nCurrY = (int)ownerGrid.Y; } } this.moveEndTime = ticks + 600L; } }