Я пишу игру на Java, (с использованием движка Slick2D и библиотеки MarteEngine, если это важно), и реализуя свой UI столкнулся с появлением отступов слева и сверху, если персонаж подходит слишком близко к этим краям экрана. Справа и снизу никаких проблем. Методом научного тыка выяснилось, что размеры отступов зависят от разрешения окна, и нашлись их приблизительные значения, но это не выход..
Что удалось выяснить:
800х600 это 100 по вертикали, и 0 по горизонтали 640х480 это 18 по горизонтали и 60 по вертикали Полный код проекта, если нужно.
(архив будет сравнительно толстый из-за ресурсов)
Исходный код класса:
package system;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import core.MyWorld;
import entities.TwilightSparkle;
public class WorldUI {
//мир, которому принадлежит интерфейс
MyWorld parent;
//нижняя панель
protected Image bottomBar;
protected Image battleBottomBar;
//верхняя панель
protected Image topBar;
//полосы жизни, и очков магии
protected Image HP;
protected Image IP;
//относительные координаты интерфейса
float interfaceX = 0;
float interfaceY = 0;
private boolean debug;
public WorldUI(MyWorld parent, GameContainer container) {
this.parent = parent;
interfaceX = (container.getWidth() - parent.twilie.hitboxWidth)/2;
interfaceY = (container.getHeight() - parent.twilie.hitboxHeight)/2;
}
public void init() throws SlickException {
topBar = new Image("textures/topBar.png");
bottomBar = new Image("textures/Interface2.png");
battleBottomBar = new Image("textures/Interface3.png");
HP = new Image("textures/IP.png");
IP = new Image("textures/HP.png");
}
public void draw(Graphics g) {
//жизнь и мана
HP.draw(interfaceX+100, interfaceY+parent.container.getHeight()-90);//520
IP.draw(interfaceX+100, interfaceY+parent.container.getHeight()-50);//560
//верхняя и нижняя рамка интерфейса
topBar.draw(interfaceX, interfaceY);
bottomBar.draw(interfaceX, interfaceY+parent.container.getHeight()-128);
//Отладка
if(debug) {
g.setColor(Color.red);
g.drawString(this.toString(), interfaceX+parent.container.getWidth()/2, interfaceY+20);
}
}
public void update() {
System.out.println("--- updates! ---");
//полезные переменные для сокращения кода
TwilightSparkle pony = MyWorld.twilie;
int worldWidth = parent.width;
int worldHeight = parent.height;
int screenWidth = parent.container.getWidth();
int screenHeight = parent.container.getHeight();
int halfOfScreenWidth = (screenWidth - pony.hitboxWidth)/2;
int halfOfScreenHeight = (screenHeight - pony.hitboxHeight)/2;
//если мы не достигли границ экрана, то координаты интерфейса следуют за персонажем
float halfOfPonyPositionX = pony.x - halfOfScreenWidth;
float halfOfPonyPositionY = pony.y - halfOfScreenHeight;
if(halfOfPonyPositionX +100/* + 18*/ > halfOfScreenWidth && halfOfPonyPositionX + screenWidth < worldWidth) {
interfaceX = halfOfPonyPositionX;
System.out.println("upd X");
System.out.println("interfaceX = halfOfPonyPositionX = "+(interfaceX));
}
if(halfOfPonyPositionY > halfOfScreenHeight /*+ 60*/ && halfOfPonyPositionY + screenHeight < worldHeight) {
interfaceY = halfOfPonyPositionY;
System.out.println("upd Y");
System.out.println("interfaceY = halfOfPonyPositionY = "+(interfaceY));
}
}
public void debug(boolean debug) {
this.debug = debug;
}
@Override
public String toString() {
StringBuilder log = new StringBuilder("--- Interface Log ---");
log.append("\n"+"interfaceX = " + interfaceX);
log.append("\n"+"interfaceY = " + interfaceY);
log.append("\n"+"halfOfScreenWidth = " + parent.container.getWidth()/2);
log.append("\n"+"halfOfScreenHeight = " + parent.container.getHeight()/2);
log.append("\n"+"Twi X = " + parent.twilie.x);
log.append("\n"+"Twi Y = " + parent.twilie.y);
log.append( "\n"+"worldWidth = " + parent.width);
log.append( "\n"+"screenHeight = " + parent.height);
return log.toString();
}
}
Вопрос, как убрать эти отступы?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости