Созданный объект придерживается экрана и не перемещается с картой

Проблема о создании объектов на карте. Все было бы прекрасно, но внезапно я могу только создать объекты (которые являются изображениями), на экране. Каждый раз, когда я даю некоторую координацию объекту, она берет (0,0) пункт экрана, не карта. Таким образом, я могу переместить своего парня вокруг карты (камера работает правильно), но например паук остается на экране, вместо этого на карте. Здесь intialization объектов:

static float PlayerPositionX = 0;
static float PlayerPositionY = 0;
static GameContainer gc; 
static StateBasedGame sbg;

//Spider
Monster monster = new Monster();

float shiftXSpider;
float shiftYSpider;

//Player position at the middle of the screen *half of the screen
static float shiftX = PlayerPositionY + (Game.screenWidth/2);
static float shiftY = PlayerPositionX + (Game.screenHeight/2);
static float shiftXMap = PlayerPositionX;
static float shiftYMap = PlayerPositionY;

Это - мой отдавать метод для карты, паука и игрока. (Просто часть, конечно)

worldMap.draw(PlayerPositionX,PlayerPositionY);
player.draw(shiftX,shiftY);
spider.draw(spiderPoint.x, spiderPoint.y);

Метод обновления:

public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
    System.out.println(playerPoint.getX() + " " + playerPoint.getY());
    playerPoint.x=PlayerPositionX;
    playerPoint.y=PlayerPositionY;
    Input input = gc.getInput();
    monster.Chase(playerPoint.x, playerPoint.y,delta);
   //monster.Chase(PlayerPositionX, PlayerPositionY,delta);
   //shiftXSpider=monster.getMonsterPositionX();
   //shiftYSpider=monster.getMonsterPositionY();
    spiderPoint.x=monster.getMonsterPositionX();
    spiderPoint.y=monster.getMonsterPositionY();

    if(input.isKeyDown(input.KEY_DOWN)) {
        player=movingDown;
        PlayerPositionY-=delta * .1f;
        if(PlayerPositionY<-600) {
            PlayerPositionY+=delta * .1f;
        }
    }
    //move up
    if(input.isKeyDown(input.KEY_UP)) {
        player=movingUp;
        PlayerPositionY+=delta * .1f;
        if(PlayerPositionY>162) {
            PlayerPositionY-=delta * .1f;
        }
    }
    //move right
    if(input.isKeyDown(input.KEY_RIGHT)) {
        player=movingRight;
        PlayerPositionX-=delta * .1f;
        if(PlayerPositionX<-840) {
            PlayerPositionX+=delta * .1f;
        }
    }
    //move left
    if(input.isKeyDown(input.KEY_LEFT)) {
        player=movingLeft;
        PlayerPositionX+=delta * .1f;
        if(PlayerPositionX>324) {
            PlayerPositionX-=delta * .1f;
        }
    }
}
3
nl ja de
Возможно, необходимо спросить это в gamedev.stackexchange.com
добавлено автор Daniel Kaplan, источник
В вашем init методе вы инициализируете эти shiftXSpider и shiftYSpider. Однако, вы не изменяете их в методе обновления, и при этом вы не используете их в отдавать методе для предоставления паука.
добавлено автор Niklas, источник

1 ответы

I did this with a camera class.
Here you can find all my classes: http://pastebin.com/u/huneater
My little game (unfinished): https://www.dropbox.com/s/dhvf5vbqj25sgyw/game.jar

Мое предоставление для прямоугольника в качестве примера:

@Override
    public void render(GameContainer gc, Graphics g, Camera camera) {
        g.setColor(color);
        g.fillRect(x - camera.getX(), y - camera.getY(), width, height);
    }

For this camera class you should set the targetX & targetY positions in your players update method:

float targetX = x - (gc.getWidth()/2);
camera.setTargetX(targetX);

float targetY = y - (gc.getHeight()/2);
camera.setTargetY(targetY);

И затем в вашей петле обновления в мире необходимо назвать петлю обновления камеры. Таким образом с этим, у меня есть игрок в midlle моего экрана с некоторыми блоками в карте. И они отлично помещены.

0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async