我为我正在使用的某些软件开发了动画,它动态地将两个对象偏移到各自的边界,然后一旦被触发就再次返回。我遇到的问题是应该跳闸的脚本没有被执行,我无法弄清楚为什么。
请注意:_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天,所以请原谅:)
答案 0 :(得分:1)
解决了这个问题,这确实是我的一个愚蠢的错误。我正在比较方法参数边界,它不考虑草的方向,使其始终为正。
if (_fgGrassBnd == _fgGrassPos) {}
if (_bgGrassBnd == _bgGrassPos) {}
_fgGrassBnd 和 _bgGrassBnd 是计算出的边界(左侧为正,右侧为负),使此动画按预期工作。