[英]How can I convert the timer from counting back in seconds to count back in minutes and seconds?
[英]How can i create a timer to count 10 seconds?
我的目標是當我的強力球與玩家的飛船相撞時,它會提高背景的滾動速度,並使敵方飛船的速度提高10秒鍾。 我想出了一些代碼來執行此操作,但是當我運行游戲並擊中強力球時,背景和敵人的飛船只能加速2-3秒而不是10秒。
idk我在做什么錯,所以有人可以幫我嗎? 這是我到目前為止:
// Do the collision bewtween the player and the powerball
for (int i = 0; i < powerballs.Count; i++)
{
rectangle3 = new Rectangle((int)powerballs[i].Position.X,
(int)powerballs[i].Position.Y,
powerballs[i].Width,
powerballs[i].Height);
// Determine if the two objects collided with each other
if (rectangle1.Intersects(rectangle3))
{
boost = true;
powerballs[i].Active = false;
}
else
boost = false;
float elasped = (float)gameTime.ElapsedGameTime.TotalSeconds;
timer -= elasped;
if (boost == true && timer < 10f)
{
for (int j = 0; j < enemies.Count; j++)
{
// Increased enemy speed variable
float newEnemySpeed = 30f;
// Setting increased speed to each enemy in the list
enemies[j].SetNewMoveSpeed(newEnemySpeed);
}
//Increased Background speed variables
int newBackgroundSpeed1 = -5;
int newBackgroundSpeed2 = -10;
// Setting increased Background speed
bgLayer1.SetNewSpeed(newBackgroundSpeed1);
bgLayer2.SetNewSpeed(newBackgroundSpeed2);;
}
else
{
for (int k = 0; k < enemies.Count; k++)
{
// Set emeny speed back to normal
enemies[k].SetNewMoveSpeed(6f);
}
// Set background speed back to normal
bgLayer1.SetNewSpeed(-1);
bgLayer2.SetNewSpeed(-2);
}
}
我想到這樣的事情(有其他幾種方法可以做到這一點)。 一旦強力球碰撞,您就可以提高速度。 您將實現一個ITimerDispatchableEvent,它可以將速度設置回正常。
class Timer {
private double _time;
private readonly IList<ITimerDispatchableEvent> _events;
public Timer(double currentTime) {
_time = currentTime
}
// Update this on each call back during the main loop
public void Update(double deltaTime) {
_time += deltaTime;
Dispatch();
}
private void Dispatch() {
// Iterate events
// if event.FireTime <= _time
// event.Fire();
}
public void AddEvent(ITimerDispatchableEvent event) {
_events.add(event);
}
}
public interface ITimerDispatchableEvent {
// the absolute time to fire. E.g. if we want to fire in 10seconds
// this will be Timer._time += 10 (assuming deltaTime is in seconds)
double FireTime { get; }
void Fire();
}
float elasped = (float)gameTime.ElapsedGameTime.TotalSeconds; timer -= elasped;
為什么不嘗試使用TimeSpan
對象?
/**Class Attributes**/
TimeSpan t;
/**End**/
for (int i = 0; i < powerballs.Count; i++)
{
rectangle3 = new Rectangle((int)powerballs[i].Position.X,
(int)powerballs[i].Position.Y,
powerballs[i].Width,
powerballs[i].Height);
// Determine if the two objects collided with each other
if (rectangle1.Intersects(rectangle3))
{
boost = true;
powerballs[i].Active = false;
//reset timer if collide, and intanciate them the first time\\
t = new TimeSpan();
}
else
{
boost = false;
}
if (boost == true && t.Milliseconds <= 10000)
{
for (int j = 0; j < enemies.Count; j++)
{
// Increased enemy speed variable
float newEnemySpeed = 30f;
// Setting increased speed to each enemy in the list
enemies[j].SetNewMoveSpeed(newEnemySpeed);
}
//Increased Background speed variables
int newBackgroundSpeed1 = -5;
int newBackgroundSpeed2 = -10;
// Setting increased Background speed
bgLayer1.SetNewSpeed(newBackgroundSpeed1);
bgLayer2.SetNewSpeed(newBackgroundSpeed2);;
//increment Timer with the gameTime\\
t+=gameTime.ElapsedGameTime;
}
else
{
for (int k = 0; k < enemies.Count; k++)
{
// Set emeny speed back to normal
enemies[k].SetNewMoveSpeed(6f);
}
// Set background speed back to normal
bgLayer1.SetNewSpeed(-1);
bgLayer2.SetNewSpeed(-2);
}
}
有關更多信息,請查看有關TimeSpan
對象的官方文檔 。
這是創建10秒計時器的代碼:
long startTicks = System.Environment.TickCount;
long tenSeconds = 10000;
while (ticksElapsed > tenSeconds)
{
long ticksElapsed = System.Environment.TickCount - startTicks;
}
這將運行10秒鍾,您也可以在需要的時候在while循環中執行一些操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.