2014-12-04 3 views
0

VS2013에서 Winforms를 사용하여 작업중인 게임에 트랙 바를 사용하고 싶습니다.트랙 바 값을 다른 클래스의 변수로 사용

사용자는 트랙볼을 사용하여 볼이 얼마나 빨리 움직이는 지 (트랙 바의 값을 다른 클래스의 다른 값으로 사용) 아이디어를 얻는 것이 좋습니다. 내가 나의 코드를 실행하면

// 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; 
} 

:

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(); 
} 

그리고이 트랙 바의 값을 원하는 내 볼 클래스에서

사용되는 : 여기

내가 현재 가지고있는 코드입니다 이 경우 xSpeed이 완벽하게 작동하지만 (예상대로) 트랙볼의 trackBarValue이 인식되지 않습니다.

내 트랙 바의 현재 속성은 다음과 같습니다

  • 최대 : 100
  • 최소 : 20
  • 틱 주파수 : 0
  • 탭 인덱스 : 11
  • 값 : 20

및 세로 (중요하지 않음)입니다.

트랙볼에서 값을 수집하고이 볼 클래스에서 어떻게 사용합니까? 트랙 바를 움직일 때마다 라벨에 트랙 바의 값을 표시하는 작은 프로그램을 만들었지 만 위의 프로그램에이 지식을 적용 할 수는 없습니다.

+0

[ MSDN Tracker Bar Class Documentation] (http://msdn.microsoft.com/en-us/library/system.windows.forms.trackbar%28v=vs.110%29.aspx) 또한 기대하는 바를 기반으로합니다. . 적어도 코드를 디버깅했거나 실행했다. .? 실제 TrackerBar에 대한 EventHandler가 누락 된 것처럼 보입니다. 튜토리얼 http://www.c-sharpcorner.com/uploadfile/mahesh/trackbar-in-C-Sharp/ – MethodMan

+0

@DJKRAZE에 대해 잘 살펴보십시오. 양식이 초기화되면 일단 트랙바에서 사용할 값을 알지 못하기 때문에 0으로 설정합니다. (또는 적어도 그 값을 알아낼 수는 있지만) 기본값을 설정하는 방법을 모르겠습니다. 예를 들어 20 트랙볼의 –

+0

내가 링크를 보았습니까 그것이 당신의 Initialize(); 보이는 것 또는 관련 코드를 보지 않고 무엇을하고 있는지 .. 내가 생각하는 양식로드에 있어야합니다. – MethodMan

답변

0

먼저 볼을 만들 때만 ySpeed ​​값을 설정하면 볼이 빠르게 처분 된 경우 작동해야하지만 TrackBarSpeed가 스크롤 할 때마다 ySpeed ​​값이 변경되는 것을보고 있다면 몇 가지 문제가 생길 것입니다. 더 쉬운 방법 O이 문제를 해결 당신은 당신이 나타납니다 그래서} 코드를 가져 오기를 {평가합니다 ySpeed ​​참조 당신이 매번 같은

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에 대한 필드를 사용하다 Y의 마지막 값은 입니다. int는 struct (value)이고 클래스 (reference)가 아니기 때문에 발생합니다. 따라서 값을 설정하면 특정 시간에 주어진 값에 의존합니다.

+0

미안 해요 stackoverflow에서 썼습니다 그래서 내가 편집 오류 (Form.trackBarValue; 전에 반환) – Patrick

+0

편집 건배, 그러나 지금 나는 받고 있어요 : 오류 1 속성 또는 인덱서 ' Breakout.Ball.ySpeed ​​'는 할당 할 수 없습니다 - 읽기 전용입니다 .' : S 죄송합니다. 하하 –

+0

코드에서 ySpeed ​​= Form.trackBarValue를 가져와야 작동합니다. – Patrick

관련 문제