이전에 간단한 공 및 패들 프로그램을 모두 하나의 형식으로 실행했습니다. 이제는 별도의 스레드에서 볼을 실행하려고 시도하지만, 나머지 프로그램은 동일하게 유지하면서 개념적으로 어떻게 볼을 별도의 스레드로 실행시키는 지 이해하지 못합니다.타이머를 사용하여 스레드에 객체 동기화하기
원래 타이머가 볼을 움직이게 만들었 기 때문에 그 볼 줄을 내 ballUpdate 클래스에 삽입 할 수 있다고 생각했습니다. 하지만 지금 내 질문에 스레드가 내 현재 타이머가 작동하도록하는 방법이 있다면입니다.
이 내가이 뭔가 가야 거라고 생각
public partial class Form1 : Form
{
Graphics paper;
Paddle paddle = new Paddle();
Ball ball = new Ball();
Thread myThread;
BallUpdate ballUpdate = new BallUpdate();
public Form1()
{
InitializeComponent();
myThread = new Thread(() => ballUpdate.ballMotion(ball));
myThread.Start();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
paper = e.Graphics;
paddle.drawPaddle(paper);
ball.drawBall(paper);
}
private void timer1_Tick(object sender, EventArgs e)
{
//ball.moveBall();
ball.collide();
ball.hitPaddle(paddle.PaddleRec);
this.Invalidate();
}
처럼 내 Form1에 보이는 것입니다했으나 볼이 전혀 이동하지 않습니다.
class BallUpdate
{
public BallUpdate(){}
public void ballMotion(Ball x)
{
while(true)
{
x.moveBall();
Thread.Sleep(30);
}
}
}
스레드를 계속 실행하려면 루프가 필요합니다. – Romoku
... Thread.Sleep은 밀리 초 (1/10 == 0)의 정수 시간 간격을 허용합니다. –
@Romoku 좋아요. x.moveball에 대한 루프도 추가 했으므로 Thread.Sleep가 1로 변경되었습니다. 움직여 라. – krikara