Я застрял в обнаружении столкновений и о том, как обращаться с ним в течение ОЧЕНЬ долгого времени. Мне нужна помощь, чтобы понять, как использовать обнаружение столкновений с помощью редактора карт Tiled. У меня есть файл TMX, который разобран и отображается с движением плеера, камеры и клавиатуры. Я не знаю, как это сделать, чтобы столкнуться. Моя карта имеет 2 слоя, один для травы и плитки, на которых вы можете ходить, а другой - objectLayer. Я видел, как люди говорили, что я должен перебирать все плитки в слое объектов и назначать им прямоугольники. У меня нет идеи, как это сделать, и я ищу кое-какие идеи.Обнаружение столкновений с Java, Slick2D и редактором карт из плитки
Мой главный вопрос: как мне пройти через мой слой и получить все плитки и назначить им прямоугольники.
игры Класс:
public class Game extends BasicGameState {
Player player;
Camera cam;
Map map = new Map();
public void init(GameContainer container, StateBasedGame sbg) throws SlickException {
map.init();
cam = new Camera(0, 0);
player = new Player(new Image("res/textures/player.png"), container.getWidth()/2, container.getHeight()/2, 32, 32);
}
public void update(GameContainer container, StateBasedGame sbg, int delta) throws SlickException {
cam.tick(player);
player.update(container, delta, map);
}
public void render(GameContainer container, StateBasedGame sbg, Graphics g) throws SlickException {
g.translate(-cam.getX(), -cam.getY());
map.render();
player.render(g);
g.translate(cam.getX(), cam.getY());
}
public int getID() {
return 1;
}
}
игрока Класс:
public class Player {
float x, y;
int width, height;
double velX = 0.4;
double velY = 0.4;
Image img;
public Player(Image img, float x, float y, int width, int height) {
this.img = img;
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public void init() throws SlickException {
}
public void update(GameContainer container, int delta, Map map) {
Input input = container.getInput();
if (input.isKeyDown(Input.KEY_D)) x += velX;
if (input.isKeyDown(Input.KEY_A)) x -= velX;
if (input.isKeyDown(Input.KEY_W)) y -= velY;
if (input.isKeyDown(Input.KEY_S)) y += velY;
}
public void render(Graphics g) {
//g.scale(-2, -2);
g.drawImage(img, x, y);
}
public float getX() {
return x;
}
public float getY() {
return y;
}
}
класс Карта:
public class Map {
TiledMap map;
public void init() throws SlickException {
map = new TiledMap("res/map/zenith.tmx");
}
public void render() throws SlickException {
map.render(0, 0);
}
}
Вау, это было удивительно подробный ответ и хорошо поставил. Я собираюсь попробовать это прямо сейчас и посмотреть, работает ли это. Теперь это имеет большее значение, большое вам спасибо. – Phippre
Im зацикливается на моей карте на объекте Layer, и если он получает tileid из 1, то он добавляет прямоугольник в массив, но он дает мне некоторую ошибку. \t Rectangle [] [] collisionArray; \t \t общественных недействительный Init() бросает SlickException { \t \t карты = новый TiledMapPlus ("Рез/карта/zenith.tmx"); \t \t int objectLayer = map.getLayerIndex ("objectLayer"); \t \t для (INT х = 0; х
Phippre
Вам может понадобиться intialise массив столкновений с пустыми прямоугольниками в петле через него. Какая ошибка? – Smallbro