私は以前、単純なボールとパドルのプログラムをすべて1つの形式で実行するように作成しました。今、私はボールを別のスレッドで実行しようとしていますが、プログラムの残りの部分を同じに保ちながら、ボールを別のスレッドで実行する方法を概念的に完全に理解していません。
もともとタイマーがボールを動かすので、その移動ラインをballUpdateクラスに挿入できると思いました。しかし今、私の質問は、現在のタイマーが実装しているスレッドを機能させる方法があるかどうかです。
これは私のform1がどのように見えるかです
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();
}
これで何かがうまくいくのではないかと思いましたが、ボールがまったく動かない。
class BallUpdate
{
public BallUpdate(){}
public void ballMotion(Ball x)
{
while(true)
{
x.moveBall();
Thread.Sleep(30);
}
}
}