我想使用轨迹栏来处理我在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
无法识别。
我的跟踪栏的当前属性包括:
它是垂直的(不重要)。
如何从轨迹栏收集值并在此球类中使用它们?我制作了一个较小的程序,每次移动轨迹栏时都会在标签中显示轨迹栏的值,但我似乎无法将这些知识应用到上面的程序中。
答案 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是一个结构(值)而不是一个类(引用)所以在你设置它的值后它将依赖于在特定时间给出的值