我正在制作一个二十一点游戏,其中一张牌需要在最后一张牌之后第二秒显示。 我已经使用它并看到Thread.Sleep - 但人们说定时器会更好。 我如何用定时器来做到这一点? 谢谢!用定时器延迟xna游戏
6
A
回答
10
float WaitTimeToShowCard = 0;
public void Update(GameTime gametime)
{
if (HasToShowCard())
{
WaitTimeToShowCard = 1;
}
if (WaitTimeToShowCard >0)
{
WaitTimeToShowCard -= (float) gametime.Elapsed.TotalSeconds;
if (WaitTimeToShowCard <=0)
{
WaitTimeToShowCard = 0;
ShowCard();
}
}
}
或
public class Timer
{
public Action Trigger;
public float Interval;
float Elapsed;
Timer() {}
public void Update(float Seconds)
{
Elapsed+= Seconds;
if (Elapsed>= Interval)
{
Trigger.Invoke();
Destroy();
}
}
public void Destroy()
{
TimerManager.Remove(this);
}
public static void Create(float Interval, Action Trigger)
{
Timer Timer = new Timer() { Interval = Interval, Trigger = Trigger }
TimerManager.Add(this);
}
}
public class TimerManager : GameComponent
{
List<Timer> ToRemove = new List<Timer>();
List<Timer> Timers = new List<Timer>();
public static TimerManager Instance;
public static void Add(Timer Timer) { Instance.Timers.Add(Timer); }
public static void Remove(Timer Timer) { Instance.ToRemove.Add(Timer); }
public void Update(GameTime gametime)
{
foreach (Timer timer in ToRemove) Timers.Remove(timer);
ToRemove.Clear();
foreach (Timer timer in Timers) timer.Update((float) gametime.Elapsed.Totalseconds);
}
}
public class Game
{
public void Initialize() { Components.Add(new TimerManager(this);}
public Update()
{
if (HasToShowCard(out card))
{
Timer.Create(1,() => card.Show());
}
}
}
+0
非常感谢:) – Tom
0
using System.Timers;
.
.
.
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Timer t = new Timer(1000);
//The number is the interval in miliseconds
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
t.Elapsed += new ElapsedEventHandler(t_Elapsed);
t.Enabled = true;
}
void t_Elapsed(object sender, ElapsedEventArgs e)
{
//code
}
.
.
.
}
我复制了一些代码位,显示添加的代码的定位... 此外,键入“t.Elapsed + =”按TAB键两次后,创建事件处理程序。 如果您想停止计时器,请将“启用”属性设置为false。 ( 'T' 是一个糟糕的变量名)
相关问题
- 1. 游戏计时器延迟损害
- 2. 设置延迟libgdx游戏
- 3. Eclipse游戏延迟太多
- 4. 时间延迟和游戏循环
- 5. 确定XNA游戏滞后
- 6. 使用带有XNA(Windows)游戏项目的XNA(Windows)游戏库
- 7. 游戏中心集成延迟
- 8. 游戏网络延迟补偿
- 9. 处理多人游戏中的延迟
- 10. Android迷你游戏 - 延迟代码
- 11. 在游戏中正确实施延迟
- 12. Google Play游戏服务 - 实时多人游戏 - 如何获取延迟
- 13. XNA游戏组件
- 14. XNA游戏性能
- 15. 鼠标XNA游戏
- 16. XNA游戏冻结
- 17. XNA游戏教程
- 18. C#XNA无游戏网络游戏
- 19. 非XNA游戏进入游戏?
- 20. 延迟开始XNA游戏切换到全屏搞乱介绍屏幕
- 21. c#Xna keydown延迟1秒
- 22. UNITY UI在ios8中实例化游戏对象时延迟
- 23. iOS游戏开始时的输入延迟
- 24. python/pygame中的时间延迟而不会中断游戏?
- 25. Cocos2d游戏定时器
- 26. 定时器在游戏中
- 27. java定时器游戏
- 28. 本地多人游戏XNA
- 29. XNA游戏嵌入网站
- 30. 在XNA游戏中progressBar
你不应该使用(*特别*不要使用'Thread.Sleep')。当调用Game.Update时累加'gameTime.ElapsedGameTime'。 –
@Andrew Russel +1 Thread.Sleep在99.9%的情况下应该避免使用它! – MattDavey
你能举个例子吗? – Tom