所以我创造了一个怪物,我想在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();
}
这不起作用。有人可以帮忙吗? 感谢
答案 0 :(得分:1)
在坐标X和Y旁边,怪物必须有一个属性,我们称之为方向。当怪物到达其中一个目标时,你改变了这个方向属性,然后你才调整坐标。
答案 1 :(得分:0)
这可能会为你做的工作
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;
}
}
答案 2 :(得分:0)
您错过了代码中的方向概念。你可以用数百种方式完成它,所以我不打算在这里编写代码。
但是一旦你的x等于501,你将其值减1,所以在下次调用时它的值为500,因此将其重置为501,依此类推。这就是它停止移动的原因。你需要改变边缘的方向,因此增加或减少X直到你碰到另一边。