关于 TargetInvocationException: 调用的目标发生了异常 的问题
异常如下:
System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.
NullReferenceException: 未将对象引用设置到对象的实例。
在 WushuStrategy.DecisionMaking.DefineRotation() 位置 c:\Users\Administrator\
Desktop\WushuStrategy1\WushuStrategy\DecisionMaking.cs:行号 453
在 WushuStrategy.DecisionMaking.StrategyStep(WushuClientEnv env) 位置 c:\User
s\Administrator\Desktop\WushuStrategy1\WushuStrategy\DecisionMaking.cs:行号 1024
--- 内部异常堆栈跟踪的结尾 ---
在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] argum
ents, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle
typeOwner)
在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] argume
nts, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwn
er)
在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invoke
Attr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisib
ilityChecks)
在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invoke
Attr, Binder binder, Object[] parameters, CultureInfo culture)
在 System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
在 Wushu.WushuService.RunLocalStrategy(Int32 tm) 位置 D:\graduate project\pub
lished\Wushu\Wushu\Wushu.cs:行号 512
代码如下:
public void DefineRotation()
{
double distanceTo = RobotPos.GetDistanceTo(OpponentRobotPos);
float num2 = this._wushuEnv.opponentRotation[0];
float num3 = this._wushuEnv.opponentRotation[2];
float num4 = this._wushuEnv.robotRotation[0];
float num5 = this._wushuEnv.robotRotation[2];
int num6 = 0;
int num7 = 0;
int num8 = 0;
VecPosition position = new VecPosition(124.0, 124.0);
VecPosition position2 = new VecPosition(153.0, 153.0);
VecPosition position3 = new VecPosition(95.0, 95.0);
Line line = Line.MakeLineFromPositionAndAngle(this.OpponentRobotPos, (this._wushuEnv.opponentRotation[1] * 3.1415926535897931) / 180.0);
Line perpendicularLine = line.GetPerpendicularLine(this.OpponentRobotPos);
VecPosition pointInLine = perpendicularLine.GetPointInLine(this.OpponentRobotPos, 10.0);
VecPosition pos = perpendicularLine.GetPointInLine(this.OpponentRobotPos, -10.0);
VecPosition position6 = line.GetPointInLine(this.OpponentRobotPos, 7.5);
Line line3 = perpendicularLine.GetPerpendicularLine(pos);
Line line4 = perpendicularLine.GetPerpendicularLine(pointInLine);
VecPosition position7 = line3.GetPointInLine(pos, 7.5);
Line line5 = Line.MakeLineFromTwoPoints(line4.GetPointInLine(pointInLine, 7.5), position7);
Line line6 = Line.MakeLineFromPositionAndAngle(this.RobotPos, (this._theta * 3.1415926535897931) / 180.0);
Line line7 = line6.GetPerpendicularLine(this.RobotPos);
VecPosition position9 = line7.GetPointInLine(this.RobotPos, 10.0);
VecPosition position10 = line7.GetPointInLine(this.RobotPos, -10.0);
VecPosition position11 = line6.GetPointInLine(this.RobotPos, 7.5);
Line line8 = line7.GetPerpendicularLine(position10);
Line line9 = line7.GetPerpendicularLine(position9);
VecPosition position12 = line8.GetPointInLine(position10, 7.5);
Line line10 = Line.MakeLineFromTwoPoints(line9.GetPointInLine(position9, 7.5), position12);
VecPosition position14 = Line.MakeLineFromTwoPoints(this.RobotPos, this.OpponentRobotPos).GetPerpendicularLine(this.RobotPos).GetPointInLine(this.RobotPos, 30.0);
//Console.WriteLine("11111111111111111111111111111");
if (((((pointInLine.m_x >= 5.5) && (pointInLine.m_x <= 242.5)) && ((pointInLine.m_y >= 5.5) && (pointInLine.m_y <= 242.5))) && (((pos.m_x >= 5.5) && (pos.m_x <= 242.5)) && (pos.m_y >= 5.5))) && (pos.m_y <= 242.5))
{
//Console.WriteLine("121212121212121212121212");
this.Enemy.WheelOnStage = true;//出事代码
//Console.WriteLine("2222222222222222222222222222");
}
else
{
//Console.WriteLine(222222222222222222);
this.Enemy.WheelOnStage = false;
}
if ((Math.Abs(num2) < 3f) && (Math.Abs(num3) <= 10f))
{
//Console.WriteLine("3333333333333333333333333333333");
this.Enemy.CanAttack = true;
}
else
{
this.Enemy.CanAttack = false;
}
if ((((distanceTo < 20.0) && (Math.Abs(num4) <= 10f)) && ((Math.Abs(num2) >= 10f) && (Math.Abs(num2) <= 103f))) || (Math.Abs(num3) > 10f))
{
this.Enemy.Down = true;
}
else
{
this.Enemy.Down = false;
}
if ((num2 < 100f) && (num2 > 75f))
{
this.Enemy.LayOnMyLeg = true;
}
else
{
this.Enemy.LayOnMyLeg = false;
}
if ((((distanceTo < 25.0) && (num2 <= -1f)) && ((Math.Abs(num3) >= 5f) && (Math.Abs(num4) < 3f))) && (Math.Abs(num5) < 3f))
{
this.Enemy.WheelOnMyLeg = true;
}
else
{
this.Enemy.WheelOnMyLeg = false;
}
if (((((num2 < -1f) && (num2 >= -10f)) && ((Math.Abs(num3) < 10f) && (Math.Abs(num3) >= 1f))) && (Math.Abs(num4) <= 5f)) && (this.Detect.OppoMotionVelocity > 0.09))
{
this.Enemy.KickMe = true;
}
else
{
this.Enemy.KickMe = false;
}
if (((this.OpponentRobotPos.GetDistanceTo(position10) < this.OpponentRobotPos.GetDistanceTo(position9)) && this.Detect.Enemy_ifDetect) || ((this.OpponentRobotPos.GetDistanceTo(position10) > this.OpponentRobotPos.GetDistanceTo(position9)) && !this.Detect.Enemy_ifDetect))
{
this.Enemy.IsOnLeft = true;
}
else
{
this.Enemy.IsOnLeft = false;
}
if ((((distanceTo <= 15.4) && (this.Detect.OppoMotionVelocity >= 0.09)) && ((num2 < -1f) && (num2 > -10f))) && this.Detect.Danger_BePushed)
{
this.Enemy.PushMe = true;
}
else
{
this.Enemy.PushMe = false;
}
if (((Math.Abs((float)(this._wushuEnv.robotRotation[1] - this._wushuEnv.opponentRotation[1])) >= 138f) && (Math.Abs((float)(this._wushuEnv.robotRotation[1] - this._wushuEnv.opponentRotation[1])) <= 222f)) || ((Math.Abs((float)(this._wushuEnv.robotRotation[1] - this._wushuEnv.opponentRotation[1])) >= 0f) && (Math.Abs((float)(this._wushuEnv.robotRotation[1] - this._wushuEnv.opponentRotation[1])) <= 42f)))
{
this.Enemy.AngleIsSuitable = true;
}
else
{
this.Enemy.AngleIsSuitable = false;
}
if (this.Enemy.AngleIsSuitable)
{
num6++;
}
else
{
num6 = 0;
}
if ((num6 == 1) && this.Enemy.AngleIsSuitable)
{
num6 = 0;
num7++;
}
else
{
num7 = 0;
}
if ((num7 == 1) && this.Enemy.AngleIsSuitable)
{
num7 = 0;
num8++;
}
else
{
num8 = 0;
}
if ((num8 == 1) && this.Enemy.AngleIsSuitable)
{
num8 = 0;
this.Enemy.Angle = true;
}
else
{
num8 = 0;
this.Enemy.Angle = false;
}
if ((Math.Abs(this._wushuEnv.opponentRotation[0]) > 40f) || (Math.Abs(this._wushuEnv.opponentRotation[2]) > 85f))
{
this.Enemy.Killed = true;
}
else
{
this.Enemy.Killed = false;
}
if (((((this.StartAttack == 0) && (this.StartBack == 0)) && ((this.StartPushAgainst == 0) && (this.StartOutAttack == 0))) && (this.Enemy.CanAttack && (this.Detect.MotionVelocity <= 1.2))) && (Math.Abs(num5) <= 10f))
{
this.Enemy.Ready = true;
}
else
{
this.Enemy.Ready = false;
}
}
和:
public WushuClientEnv StrategyStep(WushuClientEnv env)
{
_wushuEnv = env;
_count = _wushuEnv.countDown;
this.PreProcess();
//Console.WriteLine("===========================================");
DefineRotation();//出事代码
//Console.WriteLine("------------------------------------------------------------------");
this.MotionEstimate();
this.OppoMotionEstimate();
this.ArmReset();
if (this._count <= 0x37)
{
this.Strategy2();
}
else if (!((this._count < 0x3dc) || this.Enemy.Killed))
{
this.Strategy3();
}
else if ((this._count > 0x37) && (this._count < 0x3dc))
{
this.Strategy();
}
this.PostPrecess();
this.OutputInfor();
return this._wushuEnv;
}