Игрок LibGDX не двигаетсяJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Игрок LibGDX не двигается

Сообщение Anonymous »

Я разрабатываю простой прототип игры libgdx на основе 5-10-минутного руководства по плейлисту видеороликов. все работает, все рендерится, но когда дело доходит до гравитации игрока, прыжков и движений, все не так. В частности, две проблемы: гравитация, которую я установил, ничего не делает, и ввод просто не работает

Итак, здесь у вас есть все связанные с игроками, и если вы хотите больше, просто скажите мне

Игрок.java:

Код: Выделить всё

package objects.player;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;

import static helper.Constants.PPM;

public class Player extends GameEntity{

private int jumpCounter;

public Player(float width, float height, Body body) {
super(width, height, body);
this.speed = 10f;
this.jumpCounter = 0;
}

@Override
public void update() {
x = body.getPosition().x * PPM;
y = body.getPosition().y * PPM;

checkUserInput();
}

@Override
public void render(SpriteBatch batch) {

}

private void checkUserInput() {
velX = 0;
if(Gdx.input.isKeyPressed(Input.Keys.D)) {
velX = 1;
}

if(Gdx.input.isKeyPressed(Input.Keys.A)) {
velX = -1;
}

if(Gdx.input.isKeyJustPressed(Input.Keys.SPACE) && jumpCounter < 2) {
float force = body.getMass()*18;
body.setLinearVelocity(body.getLinearVelocity().x, 0);
body.applyLinearImpulse(new Vector2(0, force), body.getPosition(), true);
jumpCounter++;
}

//reiniciar jumpcounter
if(body.getLinearVelocity().y == 0) {
jumpCounter = 0;
}

body.setLinearVelocity(velX * speed, body.getLinearVelocity().y < 25 ? body.getLinearVelocity().y : 25);
}
}

Здесь GameEntity.java:

Код: Выделить всё

package objects.player;

import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.physics.box2d.Body;

public abstract class GameEntity {

protected float x, y, velX, velY, speed;
protected float width, height;
protected Body body;

public GameEntity(float width, float height, Body body) {
this.x = body.getPosition().x;
this.y = body.getPosition().y;
this.width = width;
this.height = height;
this.body = body;
this.velX = 0;
this.velY = 0;
this.speed = 0;
}

public abstract void update();

public abstract void render(SpriteBatch batch);

public Body getBody() { return body;  }
}

А вот и рендерер

Код: Выделить всё

package helper;
import com.badlogic.gdx.maps.MapObject;
import com.badlogic.gdx.maps.MapObjects;
import com.badlogic.gdx.maps.MapLayer;
import com.badlogic.gdx.maps.MapLayers;
import com.badlogic.gdx.maps.objects.PolygonMapObject;
import com.badlogic.gdx.maps.objects.RectangleMapObject;
import com.badlogic.gdx.maps.tiled.TiledMap;
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.PolygonShape;
import com.badlogic.gdx.physics.box2d.Shape;

import io.github.megamen2.lwjgl3.GameScreen;
import objects.player.Player;

import static helper.Constants.PPM;

public class TileMapHelper {

private TiledMap tiledMap;
private GameScreen gameScreen;

public TileMapHelper(GameScreen gameScreen) {
this.gameScreen = gameScreen;
}

public OrthogonalTiledMapRenderer setupMap() {
tiledMap = new TmxMapLoader().load("./maps/map0.tmx");
parseMapObjects(tiledMap.getLayers().get("objects").getObjects());
return new OrthogonalTiledMapRenderer(tiledMap);
}

private void parseMapObjects(MapObjects mapObjects) {
for(MapObject mapObject : mapObjects) {

if(mapObject instanceof PolygonMapObject) {
createStaticBody((PolygonMapObject) mapObject);
}

if(mapObject instanceof RectangleMapObject) {
Rectangle rectangle = ((RectangleMapObject) mapObject).getRectangle();
String rectangleName = mapObject.getName();

if(rectangleName.equals("player")) {
Body body = BodyHelperService.createBody(
rectangle.getX() + rectangle.getWidth()/2,
rectangle.getY() + rectangle.getHeight()/2,
rectangle.getWidth(),
rectangle.getHeight(),
false,
gameScreen.getWorld()
);
gameScreen.setPlayer(new Player(rectangle.getWidth(), rectangle.getHeight(), body));
}
}
}
}

private void createStaticBody(PolygonMapObject polygonMapObject) {
BodyDef bodydef = new BodyDef();
bodydef.type = BodyDef.BodyType.StaticBody;
Body body = gameScreen.getWorld().createBody(bodydef);
Shape shape = createPolygonShape(polygonMapObject);
body.createFixture(shape, 1000);
shape.dispose();
}

private Shape createPolygonShape(PolygonMapObject polygonMapObject) {
float [] vertices = polygonMapObject.getPolygon().getTransformedVertices();
Vector2[] worldVertices = new Vector2[vertices.length/2];

for(int i=0; i

Подробнее здесь: [url]https://stackoverflow.com/questions/79172064/libgdx-player-doesnt-moves[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • (Java LibGDX) Как изменить размер текстур в LibGDX?
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • (Java LibGDX) Как изменить размер текстур в LibGDX?
    Anonymous » » в форуме Android
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • У меня проблемы с возвращением на игру после того, как игрок умирает с Libgdx [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Мой игрок все еще находится в режиме скалолазания, когда игрок бежит с лестницы
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Персонаж не двигается в Unity
    Anonymous » » в форуме C#
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»