c# - 如何将速度值从 0,002543535 更改为 0
问题描述
我试图将速度值从 0,002543535 更改为 0,但我不知道该怎么做以及将代码放在哪里。
using AssettoCorsaSharedMemory;
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
AssettoCorsa ac = new AssettoCorsa();
ac.StaticInfoInterval = 500; // Get StaticInfo updates ever 5 seconds
ac.StaticInfoUpdated += ac_StaticInfoUpdated; // Add event listener for StaticInfo
ac.PhysicsInterval = 500;
ac.PhysicsUpdated += ac_PhysicsUpdated;
ac.Start(); // Connect to shared memory and start interval timers
Console.ReadKey();
}
static void ac_StaticInfoUpdated(object sender, StaticInfoEventArgs e)
{
// Print out some data from StaticInfo
// Console.WriteLine("StaticInfo");
// Console.WriteLine(" Car Model: " + e.StaticInfo.CarModel);
// Console.WriteLine(" Track: " + e.StaticInfo.Track);
// Console.WriteLine(" Max RPM: " + e.StaticInfo.MaxRpm);
}
static void ac_PhysicsUpdated(object sender, PhysicsEventArgs e)
{
// Print out some data from StaticInfo
Console.WriteLine(" Speed: " + e.Physics.SpeedKmh);
// Console.WriteLine(" Gear: " + e.Physics.Gear);
// Console.WriteLine(" TC: " + e.Physics.TC);
Console.WriteLine(" RPM: " + e.Physics.Rpms);
}
}
}
这是声明 SpeedKmh 的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace AssettoCorsaSharedMemory
{
public class PhysicsEventArgs : EventArgs
{
public PhysicsEventArgs (Physics physics)
{
this.Physics = physics;
}
public Physics Physics { get; private set; }
}
[StructLayout (LayoutKind.Sequential)]
public struct Coordinates
{
public float X;
public float Y;
public float Z;
}
[StructLayout (LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
[Serializable]
public struct Physics
{
public int PacketId;
public float Gas;
public float Brake;
public float Fuel;
public int Gear;
public int Rpms;
public float SteerAngle;
public float SpeedKmh;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 3)]
public float[] Velocity;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 3)]
public float[] AccG;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] WheelSlip;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] WheelLoad;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] WheelsPressure;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] WheelAngularSpeed;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] TyreWear;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] TyreDirtyLevel;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] TyreCoreTemperature;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] CamberRad;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] SuspensionTravel;
public float Drs;
public float TC;
public float Heading;
public float Pitch;
public float Roll;
public float CgHeight;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 5)]
public float[] CarDamage;
public int NumberOfTyresOut;
public int PitLimiterOn;
public float Abs;
public float KersCharge;
public float KersInput;
public int AutoShifterOn;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 2)]
public float[] RideHeight;
// since 1.5
public float TurboBoost;
public float Ballast;
public float AirDensity;
// since 1.6
public float AirTemp;
public float RoadTemp;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 3)]
public float[] LocalAngularVelocity;
public float FinalFF;
// since 1.7
public float PerformanceMeter;
public int EngineBrake;
public int ErsRecoveryLevel;
public int ErsPowerLevel;
public int ErsHeatCharging;
public int ErsisCharging;
public float KersCurrentKJ;
public int DrsAvailable;
public int DrsEnabled;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] BrakeTemp;
// since 1.10
public float Clutch;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] TyreTempI;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] TyreTempM;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public float[] TyreTempO;
// since 1.10.2
public int IsAIControlled;
// since 1.11
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public Coordinates[] TyreContactPoint;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public Coordinates[] TyreContactNormal;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 4)]
public Coordinates[] TyreContactHeading;
public float BrakeBias;
// since 1.12
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 3)]
public float[] LocalVelocity;
}
}
当我的车不移动时,我得到了图片上的速度值,有人知道如何将其更改为 0 吗?____________________________________________________________________________________________
解决方案
可能在这里(没有看到其他任何可能的地方):
static void ac_PhysicsUpdated(object sender, PhysicsEventArgs e)
{
Console.WriteLine(" Speed: " + e.Physics.SpeedKmh); // <---
// ...
}
您可以使用System.Math.Round
方法来获取最接近的整数值或显式强制int
类型:
float speed = e.Physics.SpeedKmh; // <-- 0.002543535 (float type)
double dRoundedSpeed = Math.Round(speed); // <-- 0 (double type)
float fRoundedSpeed = (float)Math.Round(speed); // <-- 0 (float type)
int iRoundedSpeed = (int)speed; // <-- 0 (int type)
推荐阅读
- sendgrid - sendgrid 每个键可以有不同的 requiretls 设置吗?
- ruby-on-rails - 凭证文件未在 Amazon Linux 上读取 Rails 6.1
- javascript - 你如何使用事件委托来切换 Font Awesome 5 SVG 图标?
- java - 如何在 Android JAVA 的列表视图中显示部分但不是全部 JSON 数据
- html - 使用样式组件垂直对齐 div 中的文本
- laravel - Laravel 控制器触发模式以显示数据
- mysql - mysql分区修剪不适用于连接
- python-3.x - 芹菜任务无法使用python从postgresql数据库中迭代多行
- r - 闪亮的输出怪异
- javascript - 单击并显示内容时,使圆形 div 扩展到其父级