android - 如何改变移动物体的位置 - Box2D

标签 android libgdx box2d

我目前创建了一个动态主体,并使用 Vector2() 以恒定速度移动。我想要的是当 body 离开屏幕边缘时,立即从当前点回到原来的点。我该怎么做?

    a.applyForceToCenter(aMovement, true);
    a.applyTorque(3000, true);

    FixtureDef fDef = new FixtureDef();
    BodyDef ballD = new BodyDef();

    ballD.type = BodyType.DynamicBody;

    //random location for asteroid
    int aLoc = (int) (aLocation * 15);
    float x = 300;
    switch(aLoc)
    {
    case 0:
        ballD.position.set(x, -105);
        break;
    case 1:
        ballD.position.set(x, -95);
        break;
    case 2:
        ballD.position.set(x, -80);
        break;
    case 3:
        ballD.position.set(x, -65);
        break;
    case 4:
        ballD.position.set(x, -50);
        break;
    case 5:
        ballD.position.set(x, -35);
        break;
    case 6:
        ballD.position.set(x, -20);
        break;
    case 7:
        ballD.position.set(x, -5);
        break;
    case 8:
        ballD.position.set(x, 10);
        break;
    case 9:
        ballD.position.set(x, 25);
        break;
    case 10:
        ballD.position.set(x, 40);
        break;
    case 11:
        ballD.position.set(x, 55);
        break;
    case 12:
        ballD.position.set(x, 70);
        break;
    case 13:
        ballD.position.set(x, 85);
        break;
    default:
        ballD.position.set(x, 0);
    }

    PolygonShape asteroid = new PolygonShape();
    asteroid.setAsBox(12.5f, 12.5f);

    //asteroid definition
    fDef.shape = asteroid;
    fDef.density = .5f;
    fDef.friction = .25f;
    fDef.restitution = .75f;

    a = world.createBody(ballD);
    a.createFixture(fDef);
    a.setFixedRotation(false);

   //asteroid image
    aSprite = new Sprite(new Texture("img/asteroid-icon.png"));
    aSprite.setSize(12.5f * 4, 12.5f * 4);
    aSprite.setOrigin(aSprite.getWidth() / 2, aSprite.getHeight() / 2);
    a.setUserData(aSprite);
    asteroid.dispose();

最佳答案

您可以使用 Body.setTransform() 来完成该任务,但我不会那样做。 setTransform() 从长远来看会造成很多麻烦。

对我来说,它会导致奇怪的错误。例如,使用 setTransform 在随机时刻禁用了我的 ContactFilter,这让我花了好几天的调试时间才发现。

此外,它会导致非物理行为,因为您基本上传送了Body

更好的方法是完全销毁 Body 并在与旧的相同的初始位置重新创建一个新的。

关于android - 如何改变移动物体的位置 - Box2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22186646/

相关文章:

ios - 在iOS中使用box2d和cocos2d旋转实体

android - Multidex 后 Robolectric 单元测试失败

android - 尽管创建了 channel ,但通知未显示在 Android O 中

java - libGDX 着色器坐标和相机位置

java - "Error:(3, 24) java: package com.badlogic.gdx does not exist",如何解决这个问题?

java - 如果不缩放 box2d 每米像素会发生什么?

Android Proguard 使用获取登录 apk 错误

android - 在 android oreo 中设备重启后 PeriodicWorkRequest 不工作

android - Libgdx 库集成在原生 android 项目中

physics - Box2d 中的摩擦