让我的对象连续左右移动c#
Make my object move left and right continuously c#
所以我创建了一个怪物,我希望它在 x= 156 和 x = 501 之间始终左右移动
这是我到目前为止在我的 move() 方法中所做的:
public void move()
{
int left = 156;
int right = 501;
if (left <= x)
{
x++;
}
if (x >= 501)
{
x -= 1;
}
}
然后我使用计时器调用方法
private void tmr2_Tick(object sender, EventArgs e)
{
foreach (Monster m in monsters_)
{
m.move();
}
screen.Refresh();
}
这行不通。有人可以帮忙吗?
谢谢
这可能适合您
public class Monster
{
private const int MIN_X = 156;
private const int MAX_X = 501;
private int _x;
//your TL(probably) will tell you to use Enum
private bool _toLeft;
public Monster()
{
_toLeft = false;
_x = MIN_X;
}
public void Move()
{
if (_toLeft)
{
_x--;
}
else
{
_x++;
}
CheckEdges();
}
private void CheckEdges()
{
if (_x == MAX_X || _x == MIN_X)
_toLeft = !_toLeft;
}
}
除了坐标 X 和 Y 之外,怪物还必须有一个 属性,我们称之为方向。当怪物达到其中一个目标时,你改变这个方向 属性,然后你才调整坐标。
您的代码中缺少方向的概念。您可以通过数百种方式来实现,所以我不打算在这里编写代码。
但是一旦您的 x 等于 501,您就将其值减一,因此在下一次调用时其值为 500,因此将其重置为 501,依此类推。这就是它停止移动的原因。您需要改变边缘的方向,因此增加或减少 X 直到碰到另一条边缘。
所以我创建了一个怪物,我希望它在 x= 156 和 x = 501 之间始终左右移动 这是我到目前为止在我的 move() 方法中所做的:
public void move()
{
int left = 156;
int right = 501;
if (left <= x)
{
x++;
}
if (x >= 501)
{
x -= 1;
}
}
然后我使用计时器调用方法
private void tmr2_Tick(object sender, EventArgs e)
{
foreach (Monster m in monsters_)
{
m.move();
}
screen.Refresh();
}
这行不通。有人可以帮忙吗? 谢谢
这可能适合您
public class Monster
{
private const int MIN_X = 156;
private const int MAX_X = 501;
private int _x;
//your TL(probably) will tell you to use Enum
private bool _toLeft;
public Monster()
{
_toLeft = false;
_x = MIN_X;
}
public void Move()
{
if (_toLeft)
{
_x--;
}
else
{
_x++;
}
CheckEdges();
}
private void CheckEdges()
{
if (_x == MAX_X || _x == MIN_X)
_toLeft = !_toLeft;
}
}
除了坐标 X 和 Y 之外,怪物还必须有一个 属性,我们称之为方向。当怪物达到其中一个目标时,你改变这个方向 属性,然后你才调整坐标。
您的代码中缺少方向的概念。您可以通过数百种方式来实现,所以我不打算在这里编写代码。
但是一旦您的 x 等于 501,您就将其值减一,因此在下一次调用时其值为 500,因此将其重置为 501,依此类推。这就是它停止移动的原因。您需要改变边缘的方向,因此增加或减少 X 直到碰到另一条边缘。