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