2011-01-12 5 views
1

그래서 본질적으로 내가 뭘하려고했는지는 객체 (플레이어)가 직선으로 총알을 발사하도록하는 것입니다 그리고 나서 계속 진행하십시오. 그래서 '총'이 35 도의 각도로 향하게되면 (화면 오른쪽에 0 도가 시계 반대 방향으로 360도 가산 됨) 총알이 일정한 속도로 움직입니다 (원점에서 그 각도로 5).점 A에서 점 B까지 일정한 속도로 직선으로 객체 이동

내 운동을하는 방식은 모든 도면을 처리 할 수있는 업데이트라는 기능이 있었기 때문에 작동하지 않을 때 수직 속도와 수평 속도가 추가됩니다. 이미 존재하는 x와 y에 적용하기에 너무 힘들어 일정한 속도로 그 각도로 움직일 수있는 적절한 수평 및 수직 속도를 추가하므로 어떤 도움도 인정 될 것입니다. -Heath

답변

1

어쩌면 update() 메소드를 사용하여 마지막으로 호출 된 이후의 시간을 측정하고이를 기반으로 총알 위치를 업데이트 할 수 있습니까?
총알이 거의 일정한 속도로 움직일 것입니다.

public class Bullet { 
    // speed is in units/second 
    // angle is in radians 
    double x; 
    double y; 
    double sv; 
    double sh; 
    public Bullet(double x, double y, double angle, double speed) { 
    this.x = x; 
    this.y = y; 
    sv = Math.sin(angle)*speed; 
    sh = Math.cos(angle)*speed; 
    last_updated = System.currentTimeMillis(); 
    } 

    long last_updated; 

    public void update() { 
    long time_elapsed = System.currentTimeMillis() - last_updated; 
    last_updated = System.currentTimeMillis(); 
    this.x += this.hs*(this.time_elapsed/1000) 
    this.y += this.vs*(this.time_elapsed/1000) 
    } 
} 


어쩌면 당신은 당신의 좌표계에 적합하게 각을 재생해야합니다 :

EDIT2 (FPS가 충분히 큰 주어진). (각도를 없애거나 Pi를 더하거나 빼는 것과 같은 것)

희망이 있습니다.

+0

나는 그것을 시도 할 수 있었다. 그러나 나는 아직도 그것을 올바르게 움직이지 않는다. – Foxx

+0

그 방법을위한 코드를 게시 할 수 있겠는가? 어딘가에 pastebin.com을 좋아하십시오. 그러면 우리는 그것을보고 뭔가를 제안 할 수있을 것입니다. – Rogach

+0

그 꽤 많이 작성 : bullet (x, y, vs, hs)/update : update() {this.x + = vs; this.y + = hs;} – Foxx