2015-06-12 5 views
0

ОБНОВЛЕНИЕ Слайк и JBox используют радианы, которые идут в противоположных направлениях, поэтому у меня были проблемы.Устранение неполадок jbox2d angle to slick2d angle

Я делаю игру, используя JBox2D и Slick2D (за заголовок). Так что, поскольку я не мог найти что-либо в Интернете об этом, я написал кучу кода с нуля, чтобы конвертировать между ними. Однако кажется, что углы разные, хотя в обеих документах говорится, что они используют радианы.

Вот мой код:

//In the update function 
angle = (float) (angle % 2*Math.PI); 
mass = player.getMass(); 
position = player.getPosition(); 

if(input.isKeyDown(inputLeft)){ 
    angle-=0.015f*turnBlocks.size()/mass;  //turning, pt1 
} else if(input.isKeyDown(inputRight)){ 
    angle+=0.015f*turnBlocks.size()/mass; 
} 

player.setTransform(position, angle);   //turning, pt2 

if(input.isKeyDown(inputForward)){ 
    float xv = (float)(0.25f * Math.sin(angle) * 
         thrustBlocks.size()/mass); //Converting angle to vector 
    float yv = (float)(0.25f * Math.cos(angle) * 
         thrustBlocks.size()/mass); 
    Vec2 curVel = player.getLinearVelocity(); 
    xv = xv + curVel.x; 
    yv = yv + curVel.y; 
    player.setLinearVelocity(new Vec2(xv, yv)); 
} 

и

//In the render function 
g.setColor(Color.gray); 

for(int mass = 0; mass < massBlocks.size(); mass++){ 
    float boxx = (float)massBlocks.get(mass)[0]; 
    float boxy = (float)massBlocks.get(mass)[1]; 
    int[] slicklist = tr.toSlick(position.x+boxx, position.y+boxy); 
    boxx = (float)slicklist[0]; 
    boxy = (float)slicklist[1]; 

    float[] ps = {boxx-tr.xscale/2, boxy-tr.yscale/2, 
       boxx+tr.xscale/2, boxy-tr.yscale/2, 
       boxx+tr.xscale/2, boxy+tr.yscale/2, 
       boxx-tr.xscale/2, boxy+tr.yscale/2}; 
    Polygon p = new Polygon(ps); 
    //turning, pt3 
    g.fill(p.transform(Transform.createRotateTransform(radAngle, slickx, slicky))); 
} 

Когда я запускаю приведенный выше код (с остальной частью его), я получаю блок игрока (ов) движется в направлении он показывает, что он сталкивается. Однако столкновение в Jbox2D не синхронизировано. Вот шаблон я нашел:

1 единица = пи/4 в пятно

Slick направлении:

7___0___1

6 ___.___ 2

5___4___3

Jbox Направление :

5___0___3

2 ___.___ 6

7___4___1

Действительно, я понятия не имею, что происходит. Может ли кто-нибудь помочь?

ответ

0

Хорошо. Оказывается, даже мысль, что преобразование Слика и угол JBox оба являются радианами, Они идут в противоположных направлениях. Итак, я сделал код ниже с .getWorldPosition вместо преобразования.

 float localJBoxX = thrustBlocks.get(count)[0]; 
     float localJBoxY = thrustBlocks.get(count)[1]; 

     float[] localEndCoords = {localJBoxX+0.5f, localJBoxY+0.5f, 
            localJBoxX-0.5f, localJBoxY+0.5f, 
            localJBoxX-0.5f, localJBoxY-0.5f, 
            localJBoxX+0.5f, localJBoxY-0.5f}; 

     float[] slickCoords = new float[localEndCoords.length]; 

     for(byte point = 0; point<localEndCoords.length/2; point++){ 

      Vec2 localPoint = new Vec2(localEndCoords[point*2], localEndCoords[point*2+1]); 

      slickCoords[point*2] = (float)tr.toSlick(player.getWorldPoint(localPoint).x, player.getWorldPoint(localPoint).y)[0]; 
      slickCoords[point*2+1] = (float)tr.toSlick(player.getWorldPoint(localPoint).x, player.getWorldPoint(localPoint).y)[1]; 
     } 

     Polygon box = new Polygon(slickCoords); 
     g.fill(box.transform(new Transform())); //as to return a shape