2010-04-13 2 views
0

내가 X를 이동하려는 해달라고와 y 같은 양의 때마다하지만 얼마나 각각해야 결정하기 위해 무엇을해야하는지 해결하는 방법을 잘 모릅니다 것을 볼 수 있습니다 나는 현재Java 사용하기 스프라이트의 경로를 직선으로 플로팅하려면 어떻게해야합니까?

int startX,endX,currX; 
int startY,endY,currY; 

public void updatePos(){ 

if(currX<=endX){ 
    currX+=1; 
} 
//Same for y 

같은 뭔가를 설명하기 위해 조정해라.

어떤 아이디어 어쩌면이

내가 이러한 좌표 (0,0) 에서 시작 상상 명확히하고 나는 경우 (18,10)

에 도달 할 도움이 될 것입니다

내 x와 y가 원하는 목표에 도달 할 때까지 한 단계 씩 증가시킵니다. 스프라이트는 대각선 방향으로 위쪽으로 이동 한 다음 오른쪽으로 이동하여 올바른 위치에 놓입니다.

내가 원하는 동작은 대상 지점을 향해 한 방향으로 이동하는 것입니다 (삼각형의 splope 함께하면 당신은)

임 점의 내 다음 세트를 찾는 방법에 대한 제안을 찾고

+0

아래 답변을 사용하여 비율 (endX - startX) :(endY - startY) ... 즉 18:10 또는 1.8 : 1을 기준으로 스프라이트 속도를 설정할 수 있습니다. 예를 들어, dx를 1.8 픽셀/ms로 설정하고 dy를 1 픽셀/ms로 설정할 수 있습니다. 위치 및 속도를 int가 아닌 double 값으로 저장하는 것을 고려해야합니다. 스프라이트가 이산 단계로 "점프"하면서 (18,10)의 끝 위치를 오버런하지 않는지 확인해야하지만이 지점을 통과하게됩니다 (반올림 오류는 제외). – Adamski

답변

0

일반적으로 스프라이트에 필요한 속도를 가지며 속도와 마지막으로 업데이트 된 이후의 경과 시간을 기반으로 위치를 업데이트합니다 (예 :

public class MySprite { 
    int x, y; // Location 
    int dx, int dy; // Velocity in pixels/millisecond 

    public void updatePosition(long deltaMillis) { 
    // Update x and y position based on current velocity. 
    x += dx * deltaMillis; 
    y += dy * deltaMillis; 
    } 
} 

애니메이션 루프가 빠르거나 느린 실행 컴퓨터의 속도에 따라. 그러나 업데이트가 미리 지정된 속도를 기반으로하므로 화면에서 움직이는 스프라이트의 속도에는 영향을 미치지 않습니다. T는 임의의 주어진 시간 t에서 X1, Y1의 위치, X0에서 Y0로 이동하는 데 필요한 시간이면

public void animationLoop() { 
    long prev = System.currentTimeMillis();; 
    long now; 
    long deltaMillis; 

    while (animationRunning) { 
    // Record ellapsed time. 
    now = System.currentTimeMillis(); 
    deltaMillis = now - prev; 
    prev = now; 

    if (deltaMillis > 0L) { // Some time has passed so move sprite. 
     sprite.updatePosition(deltaMillis); 
    } 

    // TODO: Repaint sprite. 
    } 
} 
+0

그것이 경로에 떨어질 곳을 알려줍니다. 나는 무엇을 얻는 지 상상해보십시오. 삼각형의 경사를 따라 올라가는 것을 상상해보십시오. 경사면의 점을 얻는 방법은 무엇입니까? – allen

+0

경사면의 점을 말하면 모든 점을 의미합니까? 줄을 구성 해? 위의 코드는 스프라이트가 이산적인 시간 단계로 이동되어 한 번에 몇 픽셀 씩 "점프"하게되므로이 작업을 수행하지 않습니다. 스프라이트 *의 각 위치는 사면 위에 놓여 있지만 모든 단일 점을 방문하지는 않습니다. 당신이 달성하고자하는 것을 설명하는 질문을 확장 할 수 있습니까? ... 즉 애니메이션 문제입니까, 아니면 더 많은 형상이 관련되어 있습니까? – Adamski

2

(0 < = t는 < = T)이다

X = X0 + t*(X1-X0)/T 
Y = Y0 + t*(Y1-Y0)/T 
1

확장 된 질문에 따라 시작 위치와 끝 위치 사이의 모든 픽셀을 방문하는 데 관심이있는 것 같습니다. 이 경우에는이를 수행하는 방법을 설명하는 Bresenham's Line Algorithm을 살펴볼 수 있습니다.

관련 문제