Я пытаюсь в течение последних нескольких дней ставить простые столкновения в мою простую игру. Я смотрел во многих местах по всему Интернету, но я просто не нашел ничего полезного. Я просто использую ограничивающие поля, и все, что я хочу, чтобы ящик игрока делал, останавливается, когда он попадает в блок с любой из четырех сторон (и не застревает или не отказывается от блока). Звучит не так сложно, но я нашел это невероятно трудным. Я действительно хочу знать код, который мне нужно поставить в скобки if, я прочитал и услышал всю теорию, которую я могу взять. Пожалуйста, помоги, если можешь.Как справиться с столкновением после его обнаружения
if(bb_collide(player,block)){ //detection works just fine,
//just not sure what to do afterwards
}
else{
player.setX((player.getX() + velx));
player.setY((player.getY() - vely));
player.set_coll(player.getX(),player.getY(),player.getWidth(),player.getHeight());
block.set_coll(block.getX(),block.getY(),block.getWidth(),block.getHeight());
}
я на самом деле понял это, я просто имея пару плохих дней, извините, если у меня было как плохое отношение или что-то, но я получил это делать то, что я хотел. Вот что я сделал, если кому-то интересно, потому что он отлично работает, когда один движущийся объект (двигатель) натыкается на другой неподвижный объект (ситтера). Он находит расстояние между сторонами, которые будут сталкиваться, и устанавливает скорость на это расстояние минус несколько, поэтому он не перекрывается. У меня были рендеринг с ограничивающими прямоугольниками, поэтому я мог видеть, что они перекрываются. Спасибо за ваши ответы!
public void Fix_Vel(Player mover, Terrain sitter){
if(sitter.coll_box.contains(mover.getX() + mover.getHeight() + mover.getVelX(), mover.getY()) ||
sitter.coll_box.contains(mover.getX() + mover.getHeight() + mover.getVelX(), mover.getY() + mover.getHeight())){ //mover top right and bottom right coords right collision testing
mover.setVelX(sitter.getX() - (mover.getX() + mover.getWidth()) - 2);
}
if(sitter.coll_box.contains(mover.getX() + mover.getVelX(), mover.getY()) ||
sitter.coll_box.contains(mover.getX() + mover.getVelX(), mover.getY() + mover.getHeight())){ //mover top left + bottom left coords left collision testing
mover.setVelX((sitter.getX() + sitter.getWidth()) - mover.getX() + 2);
}
if(sitter.coll_box.contains(mover.getX(), mover.getY() + mover.getVelY()) ||
sitter.coll_box.contains(mover.getX() + mover.getWidth(), mover.getY() + mover.getVelY())){ //mover top left + top right coords top collision testing
mover.setVelY((sitter.getY() + sitter.getHeight()) - mover.getY() + 2);
}
if(sitter.coll_box.contains(mover.getX(), mover.getY() + mover.getHeight() + mover.getVelY()) || //mover bottom left and bottom right coords bottom collision testing
sitter.coll_box.contains(mover.getX() + mover.getWidth(), mover.getY() + mover.getHeight() + mover.getVelY())){
mover.setVelY(sitter.getY() - (mover.getY() + mover.getHeight()) - 2);
jumping = false;
if(mover.getVelY() < 0)
mover.setVelY(0);
}
}
Значит, вы хотите, чтобы предмет придерживался сталкивающегося элемента? –