Я проваливаюсь в течение 10 часов (буквально), и я закончил, мне нужно спросить. Дело в том, что я учусь, как использовать LibGdx для программирования Java-игр. Я играю в Горизонтальный космический корабль. Итак, моя худшая проблема в том, что я не знаю, как сделать прокрутку (думаю, ничья объяснит лучше). Я хочу нарисовать фон hudge (Space) и сделать так, чтобы моя OrthographicCamera двигалась вправо, как с моим SpaceShip, так что это создаст эффект прокрутки с помощью Space Background. Никаких врагов и ничего кроме корабля на экране.
Я пытаюсь это
public void moveCamera(float x,float y){
cam.position.set(x, y, 0);
}
Затем я использую этот метод в моем методе визуализации WorldRender:
public void render(float delta){
ship.Move(delta);
moveCamera(ship.getPosition().x,ship.getPosition().y);
cam.update();
System.out.println(""+cam.position);
spriteBatch.begin();
drawBackground();
drawShip();
spriteBatch.end();
}
Я на самом деле перемещаю положение камеры (я вижу это благодаря печати), но в игре она не двигается, поэтому SpaceShip просто исчезает у края окна.
Я также попробовал это до spriteBatch.end()
spriteBatch.setProjectionMatrix(camera.combined);
но когда я делаю это, Windows oly показывает черный экран, нет корабля, нет ничего. Как я уже сказал, я в отчаянии, я вижу много примеров (прокрутка мышью, паралэкскроллинг и т.д.), Но все они продвинуты или не имеют ничего общего с моим кодом. Любая помощь будет оценена
Вот как я рисую вещи. Фон и корабль - это текстуры внутри WorldRender. Я рисую фоновое изображение очень широко, поэтому я собираюсь прокрутить, как я уже сказал. Что код
private void loadTextures(){
shipTexture=new Texture(Gdx.files.internal("nave.png"));
background=new Texture(Gdx.files.internal("fondo.jpg"));
}
public void drawShip(){
spriteBatch.draw(shipTexture,ship.getPosition().x*ppuX,ship.getPosition().y*ppuY, ship.WIDTH*ppuX,ship.HEIGHT*ppuY);
}
public void drawBackground(){
spriteBatch.draw(background, -10*ppuX,0*ppuY, Gdx.graphics.getWidth()*10,Gdx.graphics.getHeight());
}
Здесь вы можете скачать код, если кто-то хочет помочь в хардкорном режиме
Я, наконец, решил это !!!! WIIIIIIIIII !!! Что код, который я использовал в имени класса WorldRenderer, который имеет методы, которые вызываются в GameScreen для рендеринга, изменения размера и т.д.
public WorldRenderer(World world) {
// TODO Auto-generated constructor stub
this.world=world;
this.ship=world.getShip();
this.cam = new OrthographicCamera(CAMERA_WIDTH,CAMERA_HEIGHT);
this.cam.setToOrtho(false,CAMERA_WIDTH,CAMERA_HEIGHT);
this.cam.position.set(ship.getPosition().x,CAMERA_HEIGHT/2,0);
this.cam.update();//actualizamos la camara
spriteBatch=new SpriteBatch();
loadTextures();
}
private void loadTextures(){
shipTexture=new Texture(Gdx.files.internal("nave.png"));
background=new Texture(Gdx.files.internal("fondo.jpg"));
}
public void drawShip(){
spriteBatch.draw(shipTexture,ship.getPosition().x,ship.getPosition().y,10,10);
}
public void drawBackground(){
spriteBatch.draw(background, 0,0, 500,50);
}
public void render(float delta){
ship.Move(delta);
moveCamera(ship.getPosition().x);
spriteBatch.setProjectionMatrix(cam.combined);
spriteBatch.begin();
drawBackground();
drawShip();
spriteBatch.end();
}
public void moveCemara(float x){
cam.position.set(x+20,cam.position.y, 0);
cam.update();
}
Внутри корабля у меня есть этот метод, который я вызываю в рендер в WorldRenderer, чтобы переместить его
public void Move(float delta){
if(Gdx.input.isKeyPressed(Keys.LEFT)) this.position.x -=velocity *delta;
if(Gdx.input.isKeyPressed(Keys.RIGHT)) this.position.x +=velocity *delta;
if(Gdx.input.isKeyPressed(Keys.UP)) this.position.y +=velocity *delta;
if(Gdx.input.isKeyPressed(Keys.DOWN)) this.position.y -=velocity *delta;
}
Также я хочу поблагодарить людей, которые помогли мне. Я отмечаю первый ответ как хороший, но сочетание обоих было тем, что дало мне реальное решение.
Я оставляю здесь несколько тузов, за которыми я следовал, которые очень хороши для новичков
Вот и все, что нужно, с нуля ! LiGdxForNoobs
Простая платформообразующая игровая платформа Game
Очень простая игра bucketGame