2017-05-04 8 views
1

내 게임에서 중력을 구현하려고합니다. 나는 현재 행성을 궤도에 진입해야하는 달을 가지고있다 (둘 다 내 게임에서 Cell 클래스를 사용함).libgdx에서 순환 궤도 만들기

다음 코드를 사용 (단축) : 클래스 셀에서

: 클래스 GravityField에서

private Cell graviator; 
private Vector2 pos; 
private Vector2 vel; 
private Vector2 drg; 
private int mass; 
private float drgSpeed; 
private GravityField grav=new GravityField(this); 

public void move(){ 
    calculateDrag(); 
    if(orbiting){ 
     orbit(); 
    } 
    pos.add(vel); 
    pos.add(drg); 
} 

private void calculateDrag() { 
    drg.scl(drgSpeed); 
} 

private void orbit(){ 
    Vector2 temp=new Vector2(drg.x,drg.y); 
    temp.rotate90(0); 
    temp.nor(); 
    speed=(float)Math.sqrt((mass+graviator.getMass())/getGraviatorDistance()); // v= sqrt((M*m)/r) 
    temp.scl(speed); 
    vel=temp; 
} 

: 내 GravityField에 따라서

private Cell cell; 

public void computeGravity(Cell cell2) { 
    float force = getForce(cell2); 
    if (cell != cell2.getGraviator()) { 
     if (cell2.getMass() < cell.getMass()) { 
      if (force > cell2.getLargestForce()) { 
       cell2.setGraviator(cell); 
       cell2.setLargestForce(force); 
       cell2.setDrg(getDragVector(cell2)); 
       cell2.setDrgAcc(getAcceleration(cell2)); 
      } 
     } 
    } else { 
     cell2.setLargestForce(force); 
     cell2.setDrg(getDragVector(cell2)); 
     cell2.setDrgAcc(getAcceleration(cell2)); 
    } 
} 

public Vector2 getDragVector(Cell cell2) { 
    Vector2 temp = new Vector2(cell.getPos().x - cell2.getPos().x, cell.getPos().y - cell2.getPos().y); 
    temp.nor(); 
    return temp; 
} 

public Vector2 getDirection(Cell cell2) { 
    return new Vector2(cell.getPos().x - cell2.getPos().x, cell.getPos().y - cell2.getPos().y); 
} 

public float getDistance(Vector2 direction) { 
    return direction.len(); 
} 

public float getForce(Cell cell2) { 
    Vector2 temp = new Vector2(cell.getPos().x - cell2.getPos().x, cell.getPos().y - cell2.getPos().y); 
    return cell.getMass() * cell2.getMass()/(temp.len() * temp.len()); //f = M*m/r^2 
} 

public float getAcceleration(Cell cell2) { 
    Vector2 temp = new Vector2(cell.getPos().x - cell2.getPos().x, cell.getPos().y - cell2.getPos().y); 
    float force = cell.getMass() * cell2.getMass()/(temp.len() * temp.len()); 
    float acceleration = force/cell2.getMass(); // a= f/m 
    return acceleration; 
} 

나는 기본적으로 dragVector에 적용하고 끌어 당긴 세포.

셀은 셀은

pos.add(drg); 

pos.add(vel); 
내 궤도에서

() 메소드 내가 찾으려고 노력하고 있어요 및 설정 VEL와 자신의 movementVector의 VEL쪽으로 graviator으로 이동 원형 궤도를 만들기 위해.

내 문제는 어떻게 든 완벽 한 궤도를 얻을 수 없다는 것입니다. 달은 여전히 ​​약간이며 점점 더 지구쪽으로 가속화되고 있습니다.

왜 작동하지 않는지 알 수 없습니다. 올바른 수식을 사용합니까?

써내 내가 사용 : 내 OrbitVector 속도 행성

여러분의 도움에 감사드립니다 행성을 향해 가속 a= f/m으로 puling 힘에 대한 f = M*m/r^2에 대한

v= sqrt((M*m)/r)!

답변

0

꽤 간단합니다. 당신이 필요로하는 2 개의 텍스처, 당신의 궤도와 달이 있습니다. 당신이해야 할 일은 달을 궤도를 따라 계속 회전시키는 것입니다. 당신이 스프라이트를 사용하는 경우

, 당신은 그렇게 할 수 있습니다 :

sprite.setRotation(rotationVaue); 
rotationValue+=1; 

그러나 여기서 주목해야 할 매우 중요한 것은 이미지가 동일한 해상도를 가지고 있어야한다는 것입니다. 내가 원하는 정확히 무엇을

Collision detection for an arc of a circle

+0

그럼 그거 ... :

나는 최근에 같은 일을했다, 난 심지어 유래에 대한 질문을 여기 링크입니다. 물리 시스템을 구현하려고합니다. 궤도는 역동적이어야하고 여러 가지 영향을주는 별의 몸을 지원해야합니다. – Superwutz