【问题标题】:Libgdx there is one body without spriteLibgdx 有一个没有精灵的身体
【发布时间】:2023-03-10 19:15:01
【问题描述】:
    int amoumt = 10;
    int i = 1;
    while (i < amoumt+1)
            {
                    box(1);//body
                    i++;
            }

如果我使用这种方法,我会得到 9 个带有精灵的身体和一个没有精灵的身体。 但是我想要所有的精灵

在渲染方法中,用于在每个主体上绘制一个精灵:

batch.begin();
                            world.getBodies(worldBodies);
                            for (Body body : worldBodies) {
                            if (body.getUserData() instanceof Sprite) {
                            Sprite sprite = (Sprite) body.getUserData();
                            Vector2 position = body.getPosition();
                            sprite.setPosition(position.x - sprite.getWidth() / 2,position.y - sprite.getHeight() / 2);
                            sprite.setRotation(body.getAngle() * MathUtils.radiansToDegrees);
                            sprite.draw(batch);
                            }
                            }
                            batch.end();
                        }

正文:

private Body box(float a) 
                    {
                            BodyDef bodyDef = new BodyDef();
                            bodyDef.position.set(0,0);
                            bodyDef.type = BodyType.DynamicBody;
                            PolygonShape polygonShape=new PolygonShape();
                            polygonShape.setAsBox(a,a);
                            FixtureDef fixtureDef = new FixtureDef();
                            fixtureDef.shape=polygonShape;
                            fixtureDef.density=2;
                            fixtureDef.restitution=0.5f;
                            fixtureDef.friction=0.5f;
                            Body box=world.createBody(bodyDef);
                            box.createFixture(fixtureDef);
                            box.setUserData(sprite);
                            sprite = new Sprite(new Texture("android.jpg"));
                            sprite.setSize(a*2,a*2);
                            sprite.setOrigin(sprite.getWidth() / 2, sprite.getHeight() / 2);
                            worldBodies = new Array<Body>();

                            return box;
                    }

【问题讨论】:

  • 请提供更多源代码以帮助解释您的 box() 方法的作用。如果这是您创建“身体”的地方,那很可能是您的问题所在。另外,你用的是 Box2D 吗?
  • @Samich 我用更多信息编辑了帖子

标签: android libgdx sprite box2d


【解决方案1】:

据我所知,当您创建第一个框时,您设置为用户数据的精灵并未初始化。在将用户数据设置为 sprite 之前,请尝试移动 sprite = new sprite init 行。

【讨论】:

    【解决方案2】:

    我想这会解决你的问题

    private Body box(float a) 
    {
            BodyDef bodyDef = new BodyDef();
            bodyDef.position.set(0,0);
            bodyDef.type = BodyType.DynamicBody;
            PolygonShape polygonShape=new PolygonShape();
            polygonShape.setAsBox(a,a);
            FixtureDef fixtureDef = new FixtureDef();
            fixtureDef.shape=polygonShape;
            fixtureDef.density=2;
            fixtureDef.restitution=0.5f;
            fixtureDef.friction=0.5f;
            Body box=world.createBody(bodyDef);
            box.createFixture(fixtureDef);
            sprite = new Sprite(new Texture("android.jpg"));
            sprite.setSize(a*2,a*2);
            sprite.setOrigin(sprite.getWidth() / 2, sprite.getHeight() / 2);
            box.setUserData(sprite);
            worldBodies = new Array<Body>();
    
            return box;
    }
    

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多