2 개의 움직이는 객체가있는 프로그램 (AWT 프레임, 예, Swing이 더 좋지만 사용이 제한되어 있음을 알고 있습니다)이 있습니다. 그래서 각기 다른 속도로 움직일 수 있도록 각 스레드를 각각의 스레드에 넣을 것입니다.자바에서 동시 스레드 사용
한 스레드 (gameThread
)는 튀는 공을 처리하고 다른 스레드 (cannonThread
)는 화면에 그려진 캐논을 처리합니다. 그리고 발사체가 발사했다. 공의 속도와 발사체의 속도를 분리하는 방법을 확신하지 못했기 때문에 2 개의 스레드가 작동 할 것이라고 생각했습니다 (thread.sleep(speedofobject)
사용).
나는 그들을 구현하는 방법을 모르겠다. 그리고 내 임의의 추측은 (분명히) 작동하지 않았다. 화면에 아무 것도 나타나지 않으며 컴파일 할 때 오류가 생성되지 않습니다. 이전에는 공이 화면에 나타나서 주위를 돌아 다니기 시작했습니다.
여기에 여러 스레드를 수행하려는 스 니펫이 있습니다. 더 많은 정보가 필요하면 알려주세요.
public void start()
{
if (gameThread == null)
{
gameThread = new Thread(this);
gameThread.start();
}
if (cannonThread == null)
{
cannonThread = new Thread(this);
cannonThread.start();
}
}
public void run()
{
//thread for the ball, collision detection and scorekeeping
if (Thread.currentThread().equals(gameThread))
{
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
while (!kill)
{
if (!paused)
{
target.repaint();
}
try
{
Thread.sleep(ballSpeed);
}
catch(InterruptedException e){System.err.println("Interrupted.");}
}
stop();
}
//thread for the cannon and projectile
if (Thread.currentThread().equals(cannonThread))
{
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
if (!paused)
{
if (projectileFiring)
{
cannon.repaint();
}
try
{
Thread.sleep(projectileSpeed);
}
catch(InterruptedException e){System.err.println("Interrupted.");}
}
}
}
좋은 점이 있습니다. 따라서 스레드 대신 updateBall과 updateCannon 만 있으면됩니다. 내가 커 큐어 스에 대해서만하는 것은 발사체와 볼의 속도를 독립적으로 측정하는 방법입니다. 나는 공의 속도로'thread.sleep (value)'를 사용하고 있었는데, 더 작은'value'는 더 빠르게 움직일 것이며, 그 반대도 마찬가지입니다. 'thread.sleep()'을 사용하지 않고이 작업을 수행하는 좋은 방법이 있습니까? 아니면 하나의 스레드에서 두 개의 객체에 대해 해당 메소드를 사용하는 더 멋진 방법입니까? – zakparks31191
@ZakParks - 추적해야하는 다양한 속도에 대해 별도의 변수를 유지합니다. 몇 가지 표준 단위 (예 : 픽셀/초)로 속도를 유지합니다. 관련 속도를 이전 업데이트로부터의 경과 시간으로 곱하여 적용 할 변위를 결정합니다. 이렇게하면 시각적 인 속도가 애니메이션 루프 타이밍에 따라 달라지는 것이 아니라 속도 변수를 직접 제어 할 수 있습니다. –
은 나에게 의미가 있습니다. 감사합니다. – zakparks31191