Near perfect collision in LibGdx Java -
i trying collision in game perfect. testing if hit wall player, come stop. implemented collision code when player hits left side of wall(when wall on right side of player). here code.
if(entityonright){ if(player.getpositioncorner(squaremaptuples.bottom_right).x - ent.getpositioncorner(squaremaptuples.bottom_left).x > -.9f) player.setmovementbooleans(false, false, false, false); else player.setmovementbooleans(true, false, false, false); }
note: if go slow, stop player desire stopped, going fast, won't collision way want
essentially, code states if wall on right side, check bottom right corner of rectangle of player, subtract bottom left corner of wall, , check if distance between 2 0.001. 0.001 unnoticeable distance, hence why used value. here code player.setmovementbooleans
public void setmovementbooleans(boolean canmoveright, boolean canmoveleft, boolean canmoveup, boolean canmovedown){ this.canmoveright = canmoveright; if(canmoveright == false && moveright) vel.x = 0; }
the canmoveright
boolean in player
class (not in parameters) allows able move, moveright
when trying move right. here code better explain how these booleans interact:
//if clicked right arrow key , you're not going //faster max speed if(moveright && !(vel.x >= 3)){ vel.x += movementspeed; }else if(vel.x >= 0 && !moveright){ vel.x -= movementspeed * 1.5f; system.out.println("stopping"); //make sure goes rest if(vel.x - movementspeed * 1.5f < 0) vel.x = 0; }
and:
if(gdx.input.iskeypressed(keys.d) && canmoveright) moveright = true; else moveright = false;
so give summary, if click "d" key, allows start moving. if boolean canmoveright
false, won't move you. here image showing happens (the player yellow, wall green)
as can see, player goes further want to. should stop @ point:
any figuring out how accomplish extremely appreciated!
maybe way tried bit complicated :-). suggest simpler way scratch: make map , player com.badlogic.gdx.math.rectangle instance. now, in following part of code make check, whether after move player still inside map, if yes allow move, if not, don't allow:
if(gdx.input.iskeypressed(keys.d){ float requestedx, requestedy; //calculate requested coordinates rectangle newplayerpositionrectangle = new rectangle(requestedx, requestedy, player.getwidth(), player.getheight()); if (newplayerpositionrectangle.overlaps(map) { //move player } else { //move player edge of map , stop there } }
Comments
Post a Comment