Java 将jbox2d角度转换为slick2d角度时出现问题
更新 Slick和JBox使用的弧度方向相反,这就是我遇到麻烦的原因 我正在使用JBox2D和Slick2D(根据标题)制作一个游戏。所以,因为我在网上找不到任何关于它的信息,我从头开始写了一堆代码来在它们之间进行转换。然而,似乎角度不同,尽管两份文件都说它们使用弧度 这是我的密码:Java 将jbox2d角度转换为slick2d角度时出现问题,java,slick2d,jbox2d,radians,Java,Slick2d,Jbox2d,Radians,更新 Slick和JBox使用的弧度方向相反,这就是我遇到麻烦的原因 我正在使用JBox2D和Slick2D(根据标题)制作一个游戏。所以,因为我在网上找不到任何关于它的信息,我从头开始写了一堆代码来在它们之间进行转换。然而,似乎角度不同,尽管两份文件都说它们使用弧度 这是我的密码: //In the update function angle = (float) (angle % 2*Math.PI); mass = player.getMass(); position = player.ge
//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));
}
及
//在渲染函数中
g、 setColor(颜色为灰色);
对于(int mass=0;mass
当我运行上面的代码(以及其他代码)时,我会让播放器块朝着它显示的方向移动。但是,Jbox2D中的冲突不同步。以下是我发现的模式:
1个单位=pi/4英寸光滑
平滑方向:
7_uuu_uuu0_uuuu1
六、二
五、四、三
Jbox方向:
5_uuuuuuuuuuuuuu3
二,六,
七、四、一
真的,我不知道发生了什么事。有人能帮忙吗?好的。事实证明,即使Slick的变换和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
float localJBoxX=strustblocks.get(count)[0];
float localJBoxY=shorthblocks.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[]flickCoords=新的float[localEndCoords.length];
对于(字节点=0;点
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