应该触发时不会触发

时间:2012-11-27 16:38:15

标签: c# wpf

我为我正在使用的某些软件开发了动画,它动态地将两个对象偏移到各自的边界,然后一旦被触发就再次返回。我遇到的问题是应该跳闸的脚本没有被执行,我无法弄清楚为什么。

请注意:_fg和_bg值是在班级顶部定义的。

public static void Grass(Canvas canvas, int boundry)
{
    Random random = new Random();
    foreach (FrameworkElement element in canvas.Children)
    {
        var elementName = Regex.Split(element.Name, "_");
        if (elementName[0] == "grass")
        {
            switch (elementName[1])
            {
                case "foreground":
                    _fgGrassDrn = (_fgGrassPos == 0 && _fgGrassHbd == 0) ? random.Next(0, 2) : _fgGrassDrn;
                    _fgGrassPos = (_fgGrassDrn == 0) ? _fgGrassPos + 1 : _fgGrassPos - 1;
                    _fgGrassBnd = (_fgGrassDrn == 0) ? boundry : -boundry;
                    if (_fgGrassBnd == boundry) // this is the tripwire code.
                    {
                        _fgGrassHbd = 1;
                        _fgGrassDrn = (_fgGrassDrn == 0) ? 1 : 0;
                    }
                    element.RenderTransform = new SkewTransform(_fgGrassPos, 0);
                    break;
                case "background":
                    _bgGrassDrn = (_bgGrassPos == 0 && _bgGrassHbd == 0) ? random.Next(0, 2) : _bgGrassDrn;
                    _bgGrassPos = (_bgGrassDrn == 0) ? _bgGrassPos + 1 : _bgGrassPos - 1;
                    _bgGrassBnd = (_bgGrassDrn == 0) ? boundry : -boundry;
                    if (_bgGrassBnd == boundry) // this is the tripwire code.
                    {
                        _bgGrassHbd = 1;
                        _bgGrassDrn = (_bgGrassDrn == 0) ? 1 : 0;
                    }
                    element.RenderTransform = new SkewTransform(_bgGrassPos, 0);
                    break;
            }
        }
    }
}

我有一种感觉我错过了一些非常明显的东西,但我只用c#编程了大约5天,所以请原谅:)

1 个答案:

答案 0 :(得分:1)

解决了这个问题,这确实是我的一个愚蠢的错误。我正在比较方法参数边界,它不考虑草的方向,使其始终为正。

if (_fgGrassBnd == _fgGrassPos) {}
if (_bgGrassBnd == _bgGrassPos) {}

_fgGrassBnd _bgGrassBnd 是计算出的边界(左侧为正,右侧为负),使此动画按预期工作。