2008-09-24 4 views
-1

저는 디바이스 컨텍스트에서 파이썬을 사용하여 이미지를 그렸습니다. 그리고 그것을 부드럽게 움직이기/수직 또는 수평으로 움직이기를 원합니다.디바이스 컨텍스트 파이썬에서 그려진 객체를 어떻게 움직일 수 있습니까?

어떤 알고리즘을 사용해야합니까? 이런 종류의 작업에 대한 정보는 어디서 얻을 수 있습니까?

+0

이 링크는 http://stackoverflow.com/questions/126761/how-can-i-move-an-object-drawn-in-device-context-python과 중복되어 있습니까? 둘 중 하나를 닫을 수 있습니까? –

+0

사용중인 그래픽 라이브러리를 말해야합니다. – wnoise

답변

1

개체가 장치 컨텍스트에서 그려지면 개체 컨텍스트에 그대로 유지됩니다. 이동하려는 경우 다시 그릴 필요가 있습니다.

고정 된 배경을 유지하고 움직일 때마다 이동식 요소 만 다시 그릴 수 있습니다. 기본적으로 이것이 완료된 방법입니다.

(나는 프로그램이 준비되어 있지 않기 때문에 단지 당신에게 아이디어를 줄 수)이 같은 뭔가를해야 라인을 통해 원활 객체를 이동하려면

  • 은 시작과 끝 위치를 선택 : 점 A (x1, y1) 및 B (x2, y2)
  • 오브젝트가 A에서 B (예 : 10 초) 위치를 변경해야하는 시간을 선택하십시오.
  • 특정 간격 (예 : 2 초)으로 설정된 타이머를 사용하십시오.
  • 각 타이머 간격마다 오브젝트가 변경되어야하는 델타 X와 Y를 계산하십시오. 타이머 콜백이 경우 DX = (X2-X1) * 10분의 2 및 DY = (Y2-Y1) * 10분의 2
  • 는 DX 및 DY와 현재 오브젝트의 위치를 ​​증가시키고 화상
다시 그려

그것은 알고리즘이 될 것입니다.

나는 또한 PyGame을 살펴볼 것을 제안합니다. 어쩌면 당신은 그것을 사용할 수 있고 그것도 약간의 튜토리얼을 가지고있다.

+0

정확히! 시간이 지남에 따라 계산 된 좌표 값을 부드럽게 변경하는 방법에 대한 정보가 필요합니다 .... – gath

0

원활 당신이 객체가 목적지에 도착하기 위해 수행하는 방법을 첫째, 스스로에게 물어 필요 시작 사이의 객체가 (x1, y1) 및 대상이 (x2,y2) 좌표 좌표 이동합니다. 개체가 t 시간 단위 (어쩌면 초, 시간, 뭐든간에)에 도착하기를 원합니다. 이 결정되면 그 다음 변위 단위 시간당 운동에 간단하다 :

dx = (x2-x1)/t 
dy = (y2-y1)/t 

지금 당신은 단순히 (처음 (x,y)(x1,y1))을 객체의 위치로 모든 단위 시간을 (dx,dy)를 추가 할 때 개체를 중지해야합니다 목적지의 어떤 임계 거리 내에 도착한다. 이 누적됩니다 부서에 사실 오류를 설명하는 것입니다, 그래서 당신은 같은 평등 검사를 한 경우 :

(x,y)==(x2,y2) 

이제까지 true가됩니다 않을 수 있습니다.

위의 방법은 일정한 속도, 직선 운동을 제공합니다. 대신 약간의 복잡한 수식을 사용하여 개체에 가속, 유지 속도, 유지 보수를 제공 할 수 있습니다. 다음 공식은 유용 할 수 있습니다 :

v(t) = u(t) + t*a(t) 
x(t) = v(t) + t*v(t) 

이 단지 Euler's method, 그리고 애니메이션을 위해 충분합니다.

관련 문제