我试图用Box2D和libgdx制作一个程序,让角色在静态物体(这里是一个圆圈)上跳跃。但是我的相机(跟随动态物体(玩家))一直在下降,即使我的角色按照预期停留在圆圈的顶部。所以我的问题是: 1)为什么我的相机一直在下降,而它应该跟随停留在静态物体顶部的“玩家身体”?2)为什么我的相机在我按Z键时反弹,而不是我的玩家身体?
提前谢谢。您可以尝试在eclipse中运行它,以便更好地理解我的意思,以下是我在活动类中的内容:
(我没有收到任何错误/警告。)
//private SpriteBatch batch;
//private Texture texture;
//private Sprite sprite;
//public Body body;
World world;
Body playerBody;
Body planetBody;
CircleShape planetCircle;
PolygonShape playerBox;
OrthographicCamera camera;
Box2DDebugRenderer debugRenderer;
static final float BOX_STEP=1/60f;
static final int BOX_VELOCITY_ITERATIONS=6;
static final int BOX_POSITION_ITERATIONS=2;
static final float WORLD_TO_BOX=0.01f;
static final float BOX_WORLD_TO=100f;
boolean jump = false;
long lastGroundTime = 0;
@Override
public void create() {
world = new World(new Vector2(0, -50), true);
debugRenderer = new Box2DDebugRenderer();
camera = new OrthographicCamera();
camera.viewportHeight = 320;
camera.viewportWidth = 480;
camera.position.set(camera.viewportWidth * .5f, camera.viewportHeight * .5f, 0f);
camera.update();
//Ground body
/*BodyDef groundBodyDef =new BodyDef();
groundBodyDef.position.set(camera.viewportWidth / 2, camera.viewportHeight / 2 - 100 + 125);
Body groundBody = world.createBody(groundBodyDef);
PolygonShape groundBox = new PolygonShape();
groundBox.setAsBox((camera.viewportWidth) * 2, 10.0f);
groundBody.createFixture(groundBox, 0.0f);
*/
//Planet
BodyDef planetDef = new BodyDef();
planetDef.type = BodyType.StaticBody;
planetDef.position.set(camera.viewportWidth / 2, camera.viewportHeight / 2 - 100);
Body planetBody = world.createBody(planetDef);
CircleShape planetCircle = new CircleShape();
planetCircle.setRadius(125f);
FixtureDef planetFixtureDef = new FixtureDef();
planetFixtureDef.shape = planetCircle;
planetFixtureDef.density = 1.0f;
//planetFixtureDef.friction = 0.0f;
//planetFixtureDef.restitution = 0;
planetBody.createFixture(planetFixtureDef);
//Player
BodyDef playerBodyDef = new BodyDef();
playerBodyDef.type = BodyType.DynamicBody;
playerBodyDef.position.set(camera.viewportWidth / 2, camera.viewportHeight / 2 - 100 + 125 + 50);
playerBody = world.createBody(playerBodyDef);
PolygonShape playerBox = new PolygonShape();
playerBox.setAsBox(5.0f, 15.0f);
FixtureDef playerFixtureDef = new FixtureDef();
playerFixtureDef.shape = playerBox;
playerFixtureDef.density = 1.0f;
//playerFixtureDef.friction = 1.0f;
//playerFixtureDef.restitution = 1;
playerBody.createFixture(playerFixtureDef);
playerBody = world.createBody(playerBodyDef);
//Dynamic Body
/*BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set(camera.viewportWidth / 2, camera.viewportHeight / 2);
Body body = world.createBody(bodyDef);
CircleShape dynamicCircle = new CircleShape();
dynamicCircle.setRadius(5f);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = dynamicCircle;
fixtureDef.density = 1.0f;
fixtureDef.friction = 0.0f;
fixtureDef.restitution = 1;
body.createFixture(fixtureDef); */
Gdx.input.setInputProcessor(this);
}
@Override
public void dispose() {
/*batch.dispose();
texture.dispose();*/
/*dynamicCircle.dispose();
groundBox.dispose();*/
playerBox.dispose();
planetCircle.dispose();
}
@Override
public void render() {
//Gdx.gl.glClearColor(1, 1, 1, 1);
update();
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
/*batch.setProjectionMatrix(camera.combined);
batch.begin();
//sprite.draw(batch);
batch.end();*/
camera.position.set(playerBody.getPosition().x, playerBody.getPosition().y, 0);
camera.update();
//camera.apply(Gdx.gl10);
debugRenderer.render(world, camera.combined);
world.step(BOX_STEP, BOX_VELOCITY_ITERATIONS, BOX_POSITION_ITERATIONS);
//playerBody.setAwake(true);
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
public void update()
{
if(jump == true /*Gdx.input.isKeyPressed(Gdx.input.)*/ && grounded() == true)
{
playerBody.setLinearVelocity(0, 0);
playerBody.applyLinearImpulse(new Vector2(0,150), new Vector2(playerBody.getPosition().x, playerBody.getPosition().y));
jump = false;
}
//playerBody.setTransform(new Vector2(camera.viewportWidth / 2, playerBody.getPosition().y), playerBody.getAngle());
//planetBody.setTransform(new Vector2(camera.viewportWidth / 2, camera.viewportHeight / 2), 0);
}
@Override
public void resume() {
}
@Override
public boolean keyDown(int keycode) {
//if(keycode == Keys.S)
return false;
}
@Override
public boolean keyUp(int keycode) {
if(keycode == Keys.Z)
jump = true;
return false;
}
public boolean grounded()
{
if(playerBody.getPosition().y <= ((camera.viewportHeight / 2) - 100 + 125))
{
return true;
}
else
{
return false;
}
}
您正在世界上创建两个playerBody
。第二个已分配,但没有固定装置。这是您在代码中操作的,并且您的相机正在跟随。删除第二个playerBody=world.create(playerBodyDef);
,它应该工作(更好)。
我需要根据收到的表单游戏中心服务器的位置移动box 2d主体。 收到体位后,我只需使用以下命令更新体位:- 但它以不受许可的方式移动身体(例如,身体在屏幕上显示出一些人)。同时我的精灵形象不动(附身)。
我在网站上非常关注教程和答案,但没有成功。花很多时间。 使用,方法TakePhotoAsync()未打开相机(Genymotion 9.0 API-28 |设备三星j7 prime.android 8.0)。 工作精彩。 AndroidManifest。xml 文件路径。xml 汇编信息。反恐精英 主要活动。反恐精英 方法XAML。反恐精英 问题在
“相机”组件定义用户从哪个角度查看场景。相机通常与允许输入设备移动和旋转相机的控件组件配对。 例子 位于人眼平均高度(1.6米)的照相机。 <a-entity camera= "userHeight: 1.6" look-controls></a-entity> 属性 属性 描述 默认值 active 在具有多个摄影机的场景中,摄影机是否为活动摄
CameraContext jd.createCameraContext() 创建 camera上下文 CameraContext 对象。
我正在开发一些游戏,以便学习OpenGL。 我正在尝试实现一种方法来拾取对象(例如,镐、枪等)。 这个想法是,即使在相机移动或旋转之后,这个物体也会固定在相机前面。 当我向前、向后、向左、向右、向上或向下移动时,我可以通过在相机正前方设置对象的位置来使对象跟随我。 然而...当相机旋转/倾斜(向上、向下、向左、向右看...)问题就开始了。 在这种情况下,一切都很好(向上、向下、向左、向右、向右倾斜
有没有人使用过这个打包的Xamrin版本?https://components.xamarin.com/view/emgucv-v3 我最近购买了这个许可证,并击中了与这里描述的完全相同的问题(旋转相机预览到肖像Android OpenCV相机)。一直在使用各种方法。 首先转屏方向从风景到肖像,但这只是以相同的旋转形式(90度)显示流。景观似乎是唯一一个我喜欢的作品。 我尝试使用相机对象旋转相机本