让我的对象连续左右移动c#

时间:2015-02-15 10:08:05

标签: c# game-physics

所以我创造了一个怪物,我想在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();
}

这不起作用。有人可以帮忙吗? 感谢

3 个答案:

答案 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直到你碰到另一边。