2010-04-29 4 views
3

나는 게임 물리학을 배우기 시작했고 어떤 각도로 공을 움직이기 위해 노력하고 있습니다. 그러나 그것의 각도는 변하지 않습니다. 자바 좌표계는 약간 다르며 제 문제가 있다고 생각합니다. 여기 내 코드가있다. ball 클래스 I 객체를 그리는 때문에 내가 (int)velosity_X 사용자바 : 각도로 움직이는 공?

ball.posX =ball.posX+(int)velosity_X; 
    ball.posY=ball.posY+(int)velosity_Y; 

(int)velosity_Y :

scale_X= Math.sin(angle); 
scale_Y=Math.cos(angle); 
    velosity_X=(speed*scale_X); 
velosity_Y=(speed*scale_Y); 

이 실행에서 공 이동이다() 함수 :

이 x 및 y 속도를 계산하기위한 것이다

g.drawOval(posX, posX, width, height); 

및 여기에 g.drawOvalint이 필요합니다. 그것이 문제인지 아닌지 나는 모른다. 또한 각도 30을 사용하면 + X와 + Y가되지만 각도 35를 사용하면 -X와 -Y가됩니다. Java에서 좌표계를 작동하는 방법을 알지 못했습니다.

+1

'velocity'에 대해 'velosity'를 변경합니다. 어쨌든 작동하지 않지만 읽을 수는 있습니다. P – OscarRyz

+0

@Oscar : 팁을 주셔서 감사합니다. – Ercan

+0

우울하지 않습니다. (결국, 관련이 없습니다 귀하의 문제에)하지만 '좌표계'는 자바 (언어)가 아니라 사용중인 특정 그래픽 라이브러리에 의해 결정됩니다. 귀하의 경우에는 java.awt.Graphics (Java 2D API) – leonbloy

답변

7

Math.sin() 및 Math.cos()의 각도는 라디안입니다. 각도를 라디안 (각도 * Math.PI/180)으로 변형해야합니다.

+0

변경되었지만 각도는 변경되지 않았을 것입니다. 콘솔에서 Velosity_X와 Y가 바뀌었지만 공이 각도를 바꾸지 않는 것을 볼 수 있습니다. JPanel을 확장하고 여기에 내 공을 그렸고 Main 클래스에서 JFrame과 f.getContentPane()을 사용했습니다. add (velosity); – Ercan

+0

고쳐주었습니다. 대화가 잘 돌아갔습니다. 나는 잘못된 값을 사용했습니다. 실수였습니다. – Ercan

2

사용 Math#toRadians()

scale_X = Math.sin(Math.toRadians(angle)); 
scale_Y = Math.cos(Math.toRadians(angle)); 
2

당신의 유형을 확인합니다. 스케일 변수가 1보다 작고 0보다 커지기 때문에 모든 것이 float이되기를 원할 것입니다. int로 곱하면 항상 1이나 0으로 변환 될 가능성이 큽니다. 나는 이것이 확실하지 않다. 내가 너라면, (모든 규칙을 암기하는 것이 아니라) 몇 가지 간단한 방정식을 작성해 줄 것이다.

마지막 방법으로 값을 메서드 호출에 전달해야하는 경우 float (또는 double)을 int로 다운 캐스팅하는 것이 가장 좋은 방법입니다. 이것은 약간의 잔인 함이지만 어쨌든 사용하지 않는 CPU 이외의 다른 것을 해치지 않으며 버그를 예방할 수 있습니다.

+0

int 또는 Float을 사용합니까? 매끄러운 움직임을 원한다면 떠 다니는 것이 좋은 선택이 아니겠습니까? 하지만 내 공 .posX은 int이어야하며 마지막에는 INT 값을 얻고 있습니다. – Ercan