Xna 4.0 如何在XNA中添加圈速计时器?

Xna 4.0 如何在XNA中添加圈速计时器?,xna-4.0,Xna 4.0,我正在开发一款2D赛车游戏。以下是XNA;中游戏的屏幕截图。我想知道如何创建一个圈计时器。例如,“如果car1blue/car2red与方格标志开始计时器发生碰撞,如果它们再次发生碰撞,则停止计时器。”这在理论上可行吗?如果它在理论上可行,那么我如何在XNA中实现它 如果你愿意,我可以提供我到目前为止所做的代码 多谢各位 编辑; 如果您能告诉我什么代码可以放在哪里吗?在不知道如何组合的情况下,您能不能将日期时间存储在他们通过该行的某个时间,因此当它开始时,您可以: public MyGame {

我正在开发一款2D赛车游戏。以下是XNA;中游戏的屏幕截图。我想知道如何创建一个圈计时器。例如,“如果car1blue/car2red与方格标志开始计时器发生碰撞,如果它们再次发生碰撞,则停止计时器。”这在理论上可行吗?如果它在理论上可行,那么我如何在XNA中实现它

如果你愿意,我可以提供我到目前为止所做的代码

多谢各位

编辑;
如果您能告诉我什么代码可以放在哪里吗?

在不知道如何组合的情况下,您能不能将日期时间存储在他们通过该行的某个时间,因此当它开始时,您可以:

public MyGame
{
    DateTime lastLapTimestamp = DateTime.Now;
    TimeSpan lastLapTime = new TimeSpan();
    // other stuff

    public void Update(TimeSpan elapsedTime)
    {
        if(HasCompletedLap)
        {
            var currentLapTimestamp = DateTime.Now;
            lastLapTime = currentLapTimestamp - lastLapTimestamp;
            lastLapTimestamp = currentLaptimeStamp;
        }
        // Other stuff
    }
}

然后,只要在任何你想知道绕圈时间的地方显示你的最后一圈时间。

根据要求,这里是你的示例空XNA项目中需要的实现,同样,我只回答你上面提出的关于圈时间的问题:

/* 
    NEW MEMBERS FOR YOU TO IMAGINE YOU HAVE SOME MEANINGFUL RACING GAME 
*/
private Vector2 yourPosition;
private Texture2D yourCar;
private Texture2D yourTrack;
private Rectangle yourStartingLine;

private DateTime currentLapTimestamp = DateTime.Now();
private TimeSpan currentLapTime = new TimeSpan();

public Game1()
{
    graphics = new GraphicsDeviceManager(this);
    Content.RootDirectory = "Content";
}

protected override void Initialize()
{
    // Put your starting line somewhere
    yourStartingLine = new Rectangle(100,100,10,100)

    base.Initialize();  
}

protected override void LoadContent()
{
    yourCar = Content.Load<Texture2D>("YourCarAssetName")
    yourTrack = Content.Load<Texture2D>("YourTrackAssetName")
}

protected override void UnloadContent()
{
    // TODO: Unload any non ContentManager content here
}

protected override void Update(GameTime gameTime)
{
    // Check your keyboard input
    UpdatePosition(Keyboard.GetState());
    if(HasPassedStartingLine())
    { UpdateLapTime(); }
    base.Update(gameTime);
}

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);
    DrawTrack();
    DrawCar();
    DrawLapTime();
    base.Draw(gameTime);
}

/* 
    NEW METHODS FOR YOU TO PRETEND DO STUFF
*/  

private void UpdateLapTime()
{
    var newTimestamp = DateTime.Now;
    currentLapTime = newTimestamp - currentLapTimestamp;
}

private bool HasPassedStartingLine()
{
    // Work out if you have passed the starting line
    // and make sure you dont register it again until
    // they have passed the finish line
}

private void UpdatePosition(KeyboardState keyboardState)
{
    // Assumes you work out how to handle your players
    // controls to move the position of the car
}

private void DrawTrack()
{
    // Your rendering logic for the track
}

private void DrawCar()
{
    // Your rendering logic for the car
}

private void DrawLapTime()
{
    // your rendering logic for the lap time
}
/*
新会员让你想象你有一些有意义的赛车游戏
*/
私人矢量2位置;
私家车;
私密的纹理和你的轨迹;
专用矩形起始线;
private DateTime currentLapTimestamp=DateTime.Now();
private TimeSpan currentLapTime=new TimeSpan();
公共游戏1()
{
graphics=新的GraphicsDeviceManager(此);
Content.RootDirectory=“Content”;
}
受保护的覆盖无效初始化()
{
//把你的起跑线放在某个地方
yourStartingLine=新矩形(100100,10100)
base.Initialize();
}
受保护的覆盖void LoadContent()
{
yourCar=Content.Load(“YourCarAssetName”)
yourTrack=Content.Load(“YourTrackAssetName”)
}
受保护的覆盖无效UnloadContent()
{
//TODO:在此卸载任何非ContentManager内容
}
受保护覆盖无效更新(游戏时间游戏时间)
{
//检查键盘输入
UpdatePosition(Keyboard.GetState());
如果(HasPassedStartingLine())
{UpdateLapTime();}
更新(游戏时间);
}
受保护覆盖无效绘制(游戏时间游戏时间)
{
图形设备。清晰(颜色:矢车菊蓝);
牵引绳();
牵引车();
DrawLapTime();
基础。抽签(游戏时间);
}
/* 
你假装做事的新方法
*/  
私有void UpdateLapTime()
{
var newTimestamp=DateTime.Now;
currentLapTime=newTimestamp—currentLapTimestamp;
}
二等兵布尔已经过了起点线()
{
//计算一下你是否已经过了起跑线
//并确保在注册之前不会再次注册
//他们已经过了终点线
}
私有无效更新位置(KeyboardState KeyboardState)
{
//假设你知道如何处理你的球员
//控制移动汽车的位置
}
专用void DrawTrack()
{
//轨迹的渲染逻辑
}
私家车
{
//您的汽车渲染逻辑
}
私有void DrawLapTime()
{
//以圈为单位的渲染逻辑
}

听着,我是XNA的新手,你让我更困惑了:(.不太了解,我不知道你的碰撞检测系统,我不知道你的更新方法是如何调用的,我对你的任何实现都不了解。因此,我唯一能提供帮助的方法是给你一些近似的实现,比如psudocode。最终,你需要做的是拍下你通过测试的时间快照(或开始比赛)然后每次检查新的时间戳,然后计算出已经过去的时间…我知道每个人都必须从某个地方开始,但你听起来像是在跑步,然后才能走路。如果你向我们提供更多信息,也许我们可以帮你。我想你需要更改你的问题,当前的问题是你如何找出一个la的时间长度p需要,但是从上面的代码来看,您缺少一个游戏实现……如果您想知道如何组合一个赛车游戏,那么您需要将您的问题分解为:1)如何在屏幕上绘制汽车2)如何在屏幕上移动汽车3)如何计算移动物体上的碰撞。一旦你有了这3个问题的答案,你可以使用下面的答案。