Я пытаюсь сделать 3D-игру, но мне сложно с ней столкнуться. Я работал над системой, но это не очень хорошо. У меня уже есть система для столкновения с ландшафтом, но она не может использоваться для столкновения с сущностями (так как у местности есть только высота, с которой она сталкивается). Я использую blender-models, и они состоят из треугольников. 100% точное столкновение будет заключаться в использовании какой-либо формы обнаружения столкновений для каждого треугольника, но их так много, и поэтому игра потеряет свою производительность. Большая часть кода основана на учебнике ThinMatrix на YouTube, за исключением некоторых из них, которые я создал сам. Вот некоторые из кода, который я использую для текущего столкновения:LWJGL Java collision
public boolean collision(Entity e1, Entity e2){
if(e1.getPosition().x >= e2.getPosition().x && e1.getPosition().x < e2.getPosition().x + e2.getWidth()){
if(e1.getPosition().z >= e2.getPosition().z && e1.getPosition().z < e2.getPosition().z + e2.getWidth()){
System.out.println("XXX||&&&||ZZZ");
return true;
}
}
return false;
}
Этот метод является методом столкновения. Он основан на положениях X и Z и поэтому очень неточен. В играющим классе, я называю это:
public void tick(){
for(Entity e : entities){
if(super.collsion(this, e)){
I haven't gotten to this
}
}
}
Эта система работает, но он имеет очень много проблем, одна из них в том, что она является неточной.
EDIT: Я работаю над использованием нового вектора (который я сделал), который я назвал Vector6f. Используя несколько значений, нужно сохранять и получать значения. Он принимает параметры x, y, z, xwidth, zwidth, height. С этим я создал новый метод, который я назвал getBounds, который возвращает границы сущностей. если у объекта нет границ, он не будет совершать столкновений
я не имею вычислил центр xy и z. Как это делается? –
У меня нет опыта работы с LWJGL, но он должен рисовать объекты из центральной точки. Следовательно, мировой перевод объекта должен быть центральной точкой для этого объекта. Постскриптум Почему бы вам не использовать настоящий игровой движок, например, JMonkey построен поверх LWJGL и имеет значительно больше возможностей, в том числе физический движок, который выполняет коллизии для вас. – AlmasB
Я работал некоторое время, открывая координаты XYZ и Я пришел к этому соглашению; Я не могу так. начальные координаты XYZ (0,0,0) начинаются в одном и том же положении, назад влево слева. Из-за всех этих факторов я решил сделать что-то, даже если не писал, когда писал это сообщение; Я собираюсь создать новый вектор. Vector6f примет эти параметры: x, y, z, xwidth, zwidth, height. У этого есть некоторые методы, которые заменяют всю бессмыслицу в моем первом сообщении. он также позволяет игроку войти в единый объект, состоящий из 2-х Vector6f. Тем не менее, WIP. –