Почему мой игрок не падает (гравитация) в Eclipse и LibGDX? - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь заставить моего игрока упасть / go, но он этого не делает. Он просто застрял на карте. Он не может двигаться. Можете ли вы помочь?

Вот код для экрана. Здесь у меня есть все методы, такие как показ, рендеринг, изменение размера, пауза, возобновление, скрытие и т. Д. c

package net.hasanbilal.prisonrevelations.screens;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.maps.tiled.TiledMap;
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
import net.hasanbilal.prisonrevelations.entities.Player;

public class Play implements Screen {

    private TiledMap map;
    private OrthogonalTiledMapRenderer otmr;
    private OrthographicCamera camera;

    private Player porter;

    @Override
    public void show() {
        map = new TmxMapLoader().load("maps/level1.tmx");

        otmr = new OrthogonalTiledMapRenderer(map);

        camera = new OrthographicCamera();

        porter = new Player(new Sprite(new Texture("img/porter.png")));

    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        otmr.setView(camera);
        otmr.render();

        otmr.getBatch().begin();
        porter.draw(otmr.getBatch());
        otmr.getBatch().end();

    }

    @Override
    public void resize(int width, int height) {
        camera.viewportWidth = width;
        camera.viewportHeight = height;
        camera.update();

    }

    @Override
    public void pause() {
        // TODO Auto-generated method stub

    }

    @Override
    public void resume() {
        // TODO Auto-generated method stub

    }

    @Override
    public void hide() {
        dispose();

    }

    @Override
    public void dispose() {
        map.dispose();
        otmr.dispose();

    }

}

Вот код для игрока

package net.hasanbilal.prisonrevelations.entities;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;

public class Player extends Sprite {

    /** 
     * x and y velocity
     */
    private Vector2 velocity = new Vector2();

    //change 120 to 60*2 if it doesn't work
    private float speed = 60 * 2, gravity = 60 * 1.8f;

    public Player(Sprite s) {
        super(s);

    }

    public void draw(SpriteBatch sb) {
        update(Gdx.graphics.getDeltaTime());
        super.draw(sb);

    }
    private void update(float deltaTime) {
        velocity.y -= gravity * deltaTime; //gravity to player

        if(velocity.y>speed)
            velocity.y = speed;
        else if(velocity.y < speed)
            velocity.y = -speed;

        setX(getX() + velocity.x * deltaTime);
        setY(getY() + velocity.y * deltaTime);

    }

}

Это назначение скоро! Пожалуйста, помогите!

1 Ответ

0 голосов
/ 10 января 2020

Неважно, ребята, я исправил это. Все, что мне нужно было сделать, это добавить porter.update(1); между porter.draw(otmr.getBatch()); и otmr.getBatch().end();

...