更新 Slick 和 JBox 使用相反方向的弧度,这就是我遇到麻烦的原因。
我正在使用 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 个单位 = pi/4 in slick
光滑的方向:
7___0___1
6___.___2
5___4___3
Jbox方向:
5___0___3
2___.___6
7___4___1
真的,我不知道发生了什么。有人可以帮忙吗?