使用trackbar的值作为另一个类的变量

时间:2014-12-04 20:52:13

标签: c# visual-studio-2013 trackbar

我想使用轨迹栏来处理我在VS2013中使用Winforms的游戏。

这个想法是,用户应该选择使用轨迹栏的球的速度(使用轨迹栏中的值来表示不同类别中的另一个变量)。

这是我目前拥有的代码:

public static int trackBarValue;
//... Other global variables

public Form1()
{
    //... Other code
}

private void trackBar1_Scroll(object sender, EventArgs e)
{
    trackBarValue = trackBar1.Value;
}


private void timer1_Tick(object sender, EventArgs e)
{
    ball.moveBall();
}

在我的球类中,我想要使用轨迹栏的值:

// Declaring the variables for Ball Speed in X and Y coordinates
private int xSpeed, ySpeed;

public Ball()
{ 
    //... Other code

    xSpeed = Form1.ranNum.Next(1, 20);
    ySpeed = Form1.trackBarValue; // <- An example of what I was hoping to use in my code.
}

public void moveBall()
{
    ballRec.X += xSpeed;
    ballRec.Y -= ySpeed;
}

当我按原样运行我的代码时,xSpeed完美地工作(正如预期的那样),但是跟踪栏中的trackBarValue无法识别。

我的跟踪栏的当前属性包括:

  • 最高:100
  • 最低:20
  • Tick Frequency:0
  • 标签索引:11
  • 价值:20

它是垂直的(不重要)。

如何从轨迹栏收集值并在此球类中使用它们?我制作了一个较小的程序,每次移动轨迹栏时都会在标签中显示轨迹栏的值,但我似乎无法将这些知识应用到上面的程序中。

1 个答案:

答案 0 :(得分:0)

首先,你只是在创建球时设置ySpeed的值,如果你的球被快速处理它应该有效,但是如果你每次TrackBarSpeed滚动时你用它来改变它的ySpeed值那么你'会有一些问题。 解决问题的更简单方法是不使用ySpeed的字段,而是使用像这样的getter属性

private int xSpeed;
private int ySpeedMod; // we have the direction variable here -1 or 1 so everytime you want to change the direction you change this variable
private int ySpeed {
    get { return Form.trackBarValue * ySpeedMod; }
}

就像每次你引用你ySpeed时它会评估get {}代码所以它会带来Y的最后一个值 发生这种情况是因为int是一个结构(值)而不是一个类(引用)所以在你设置它的值后它将依赖于在特定时间给出的值