c#在另一个计时器中使用计时器
本文关键字:计时器 另一个 | 更新日期: 2023-09-27 18:03:00
我正在编写俄罗斯方块游戏。到目前为止,我已经实现了一个非常短的间隔约50毫秒的计时器。每隔一秒,当前下落的tetrmino就会在游戏矩阵中向下移动一个位置。然后游戏检查是否有碰撞,如果有,则标记为"着陆",并生成新的tetromino。
不,我的问题是,我想让玩家有机会将tetromino移动到左边或右边,假设在它降落0.5秒后,有可能将tetromino移动到悬垂的已经降落的tetromino下面。
但与我目前的代码,我有问题,只要有一个碰撞检测定时器继续并产生下一个四足。我现在的想法是尝试实现第二个计时器,每次检测到碰撞时激活0.5秒,以便在主计时器继续之前允许额外的键盘输入。所以基本上暂停主计时器0.5秒,让程序在这段时间内检测键盘输入,然后继续主计时器。
到目前为止,我所尝试的一切都没有真正奏效。似乎第一个计时器总是继续运行,而我有第二个计时器活动。
这是我的第一个计时器的样子:
private void TimerBrick_Tick(object sender, EventArgs e)
{
ResetGameBoard(jaggedTetrisBricks[rnd-1][rotation], _brickX, _brickY, xLengthBrick, yLengthBrick);
_brickX++;
CollisionCheck(jaggedTetrisBricks[rnd - 1][rotation], _brickX, _brickY, xLengthBrick, yLengthBrick);
LineCheck();
Invalidate();
}
现在我需要在我的CollisionCheck()
方法中实现一种方法,在代码继续执行LineCheck()
之前等待0.5秒。
还是我现在看不到的另一种方式?
除了我之前的评论-这里是一点伪代码:
enum GameState
{
Starting,
CreateBrick,
BrickFalling,
MoveSideways
}
private GameState curState = Starting;
private ushort ctSideways;
private void TimerBrick_Tick(object sender, EventArgs e)
{
switch (curState)
{
case Starting:
InitialiseGame();
curState = CreateBrick;
break;
case CreateBrick:
CreateNewBrick();
curState = BrickFalling;
break;
case BrickFalling:
.....
.....
if (CollisionCheck())
{
ctSideways = 0;
curState = MoveSideways;
}
break;
case MoveSideways:
.....
.....
ctSidways++;
if (ctSideways == 10)
curState = CreateBrick;
break;
}
}