SlandShow
@SlandShow
70% of my body is made of movies.

Почему у меня не выходит отрисовывать новые объекты?

Пишу свой проект для выпуска. Уже основа есть - тайловая система, система GameState`ов и т.д. Но когда дело дошло до создание игроков - то ничего дельного не вышло. Сразу скажу, что с фреймворком я знаком не ахти.

Вот основная ,так сказать, деталь моей игры:
public class MyGdxGame extends Game {
    
    public static SpriteBatch batch;
    Texture img;
    public static final int V_WIDTH = 400;
    public static final int V_HEIGHT = 208;
    public static final float PPM = 100;
    private GameLoader load;

    


    @Override
    public void create() {
        batch = new SpriteBatch();
        load = new GameLoader(this);
        setScreen(load.getCurrentState()); // тут, как я понял, закрепляется основная сцена на фрейм

    }

    @Override
    public void render() {
        super.render();
    }

    @Override
    public void dispose() {
        batch.dispose();
        img.dispose();
    }

}


Но теперь перейдем к главному, к созданию врагов. Сначала хочу показать то, как я создавал игрока:

public class Player extends Sprite {

    public World world;
    public Body b2body;

    public Player(World world) {
        this.world = world;
        definePlayer();
    }


    // create player
    public void definePlayer() {
        BodyDef bdef = new BodyDef();
        bdef.position.set(32 / MyGdxGame.PPM, 200 / MyGdxGame.PPM);
        bdef.type = BodyDef.BodyType.DynamicBody;
        b2body = world.createBody(bdef);

        FixtureDef fdef = new FixtureDef();
        CircleShape shape = new CircleShape();
        shape.setRadius(5 / MyGdxGame.PPM);

        fdef.shape = shape;
        b2body.createFixture(fdef);

    }

    // для реализации света
    public Body getB2body() {
        return b2body;
    }
}


У меня есть класс PlayScreen. Там я запускаю первый уровень: отрисовываю игрока, карту и вот, хотелось бы, врагов. Но врагов почему-то рисовать схожим способом с игроком никак не выходит.

Как я создаю игрока:

player = new Player(world); // create player

И рендеринг:
b2dr.render(world, gameCam.combined);

Если вы не поняли что-то, то вот ссылка на гитхаб (на конкретный класс, где все это происходит)

Т.е при такой записи у меня не выходит того результата, которого я хочу добиться:

Enemy enemy;
...
...
enemy = new SimpleEnemy(world);


Вот класс Enemy, который аналогичен классу Player
public abstract class Enemy extends Sprite {

    World world;
    Body b2body;

    public Enemy(World world) {
        this.world = world;
    }

    // create enemy
    public abstract void defineEnemy();

    public World getWorld() {
        return world;
    }

    public Body getB2body() {
        return b2body;
    }
}


И SimpleEnemy:
public class SimpleEnemy extends Enemy {


    public SimpleEnemy(World world) {
        super(world);
        defineEnemy();
    }

    @Override
    public void defineEnemy() {

        BodyDef bdef = new BodyDef();
        bdef.position.set(32 + 10 / MyGdxGame.PPM, 200 + 10 / MyGdxGame.PPM);
        bdef.type = BodyDef.BodyType.DynamicBody;
        super.b2body = super.world.createBody(bdef);

        FixtureDef fdef = new FixtureDef();
        CircleShape shape = new CircleShape();
        shape.setRadius(20 / MyGdxGame.PPM);


        fdef.shape = shape;
        super.b2body.createFixture(fdef);

    }
}


Заранее благодарю за помощь!
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы