Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择方阵对角线上的单元格(按钮)_C#_Algorithm_Animation - Fatal编程技术网

C# 选择方阵对角线上的单元格(按钮)

C# 选择方阵对角线上的单元格(按钮),c#,algorithm,animation,C#,Algorithm,Animation,我正在编写wpf音乐垫应用程序,其中我有16个按钮(这里是一个真正的音乐垫示例) 每个按钮播放不同的音乐样本。这很有效。 但当用户处于空闲状态时,我想创建下图所示的简单动画 动画从按钮1开始(将其背景色设置为白色,然后返回到原始颜色) 以下是动画的步骤: 步骤1:为按钮设置动画:1 步骤2:为按钮设置动画:2,Q 步骤3:为按钮设置动画:3、W、A 步骤4:为按钮设置动画:4、E、S、Z 步骤5:为按钮设置动画:R、D、X 步骤6:为按钮设置动画:F、C 步骤7:为按钮设置动画:V 我创建

我正在编写wpf音乐垫应用程序,其中我有16个按钮(这里是一个真正的音乐垫示例)

每个按钮播放不同的音乐样本。这很有效。 但当用户处于空闲状态时,我想创建下图所示的简单动画

动画从按钮1开始(将其背景色设置为白色,然后返回到原始颜色)

以下是动画的步骤:

  • 步骤1:为按钮设置动画:1
  • 步骤2:为按钮设置动画:2,Q
  • 步骤3:为按钮设置动画:3、W、A
  • 步骤4:为按钮设置动画:4、E、S、Z
  • 步骤5:为按钮设置动画:R、D、X
  • 步骤6:为按钮设置动画:F、C
  • 步骤7:为按钮设置动画:V
我创建了函数AnimatePad,它接受按钮并在指定时间后启动背景色动画。此函数按预期工作

为了实现上述步骤,我为每个按钮调用AnimatePad函数。这是我目前正在使用的代码,这是我想要改进的。我目前已经硬编码了这些步骤。如果我的按钮计数发生了变化,我必须返回并更改此代码,这是一个坏主意

        double beginMs = 0;
        var spd = 300;
        var interval = 40;
        var toColor = Color.FromRgb(255, 255, 255);
        AnimatePad(ref beginMs, spd, pads[0], toColor);

        beginMs += interval;
        AnimatePad(ref beginMs, spd, pads[1], toColor);
        AnimatePad(ref beginMs, spd, pads[4], toColor);

        beginMs += interval;                
        AnimatePad(ref beginMs, spd, pads[2], toColor);
        AnimatePad(ref beginMs, spd, pads[5], toColor);
        AnimatePad(ref beginMs, spd, pads[8], toColor);

        beginMs += interval;                
        AnimatePad(ref beginMs, spd, pads[3], toColor);
        AnimatePad(ref beginMs, spd, pads[6], toColor);
        AnimatePad(ref beginMs, spd, pads[9], toColor);
        AnimatePad(ref beginMs, spd, pads[12], toColor);

        beginMs += interval;                 
        AnimatePad(ref beginMs, spd, pads[7], toColor);
        AnimatePad(ref beginMs, spd, pads[10], toColor);
        AnimatePad(ref beginMs, spd, pads[13], toColor);

        beginMs += interval;                 
        AnimatePad(ref beginMs, spd, pads[11], toColor);
        AnimatePad(ref beginMs, spd, pads[14], toColor);

        beginMs += interval;                
        AnimatePad(ref beginMs, spd, pads[15], toColor);
所以我想要更通用的方式来选择动画按钮

我相信一定有某种算法。谢谢大家!

试试这个:

var n = (int) Math.Sqrt(pads.Length);
int i = 0, j = 0, k = 0;
for(i = 0; i < n; i++){
   k = i;
   AnimatePad(ref beginMs, spd, pads[k], toColor);
   for(j = 0; j < i; j++){
      k += n-1;          
      AnimatePad(ref beginMs, spd, pads[k], toColor);
   }
   beginMs += interval;
}
for(i = n-2; i >= 0; i--){       
   k = (n-i)*n - 1;
   AnimatePad(ref beginMs, spd, pads[k], toColor);
   for(j = 0; j < i; j++){
      k += n-1;
      AnimatePad(ref beginMs, spd, pads[k], toColor);
   }
   beginMs += interval;
}
var n=(int)Math.Sqrt(pads.Length);
int i=0,j=0,k=0;
对于(i=0;i=0;i--){
k=(n-i)*n-1;
AnimatePad(参考beginMs、spd、pads[k]和toColor);
对于(j=0;j
想象一个二维数组,其中包含索引及其索引之和。 如果您添加每个按钮的索引,您将得到总和。 例如,0,0项的总和为0。2,1索引和为3,依此类推

在步骤1中选择索引和为0的按钮,在步骤2中选择索引和为1的按钮,以此类推

我不知道pads阵列的类型是什么。如果它们只是按钮数组,那么我建议创建复杂类型。例如:

public class PadItem
{
    public Button Pad {get; set; }
    public int IndexSum {get; set; }
}
以下是示例:

for (int i = 0; i < 7; i++)
{
    var stepPads = pads.Where(p => p.IndexSum == i);
    beginMs += interval;
    foreach (var pad in stepPads)
    {
        AnimatePad(ref beginMs, spd, pad, toColor);
    }
}
for(int i=0;i<7;i++)
{
var steppad=pads.Where(p=>p.IndexSum==i);
beginMs+=间隔;
foreach(阶梯垫中的var垫)
{
AnimatePad(参考beginMs、spd、pad、toColor);
}
}

你的
pad
应该是方形阵列,这样会更容易。否则,如果行数=列数,我们可以使用<代码>数学> Sqrt <代码>,但是使用方数组更好。请问你是如何确定矩形矩阵上给定的对角线元素的索引的?或者,如果你只想改善当前代码的考虑。不,我想用通用的方法来确定索引。Pad始终是方形阵列。@WaterDance,请检查您是否同意我对标题的编辑,请随时改进(或还原,我也不认为原始标题明确指定了您要查找的内容)。输入检查假定
Pad。长度
应该是某个数字的平方,例如
4
9
16
25
,…不。没用。我将n转换为int。但动画顺序不正确。@WaterDance算法对我来说似乎是正确的,它根本没有动画?或者以错误的顺序设置动画?@WaterDance您能检查一下它当前设置动画的确切顺序吗?它以错误的顺序设置动画。首先是1,然后是2,Q,R,这是不正确的。