저는 코드를 약간 수정하려고 노력하고 있습니다. 코드가 완전히 다른 방식으로 작업하는 것을 완전히 혼동하는 이유에 대해 혼란스러워합니다. 그런 사소한 변화. 나는 이것을 디버깅하고 아주 사소한 것들을 변경했지만, 내가 변화를 만들 때, 그 거리를 유지하는 대신에 흔적이 덩어리진다.약간의 변경으로 흔적이있는 움직이는 물체가 생기지 않게하십시오.
목표 : 왜 사소한 변화가 거리를 유지하는 대신 흔적을 왜곡하는지 파악하려고합니다.
여기서 마이너 코드가 변경되기 전에 플레이어가 움직이고 있으며 완벽하게 작동합니다.
public void Move(int delta){
float moveSpeed = playerSpeed * delta;
if(IsMoving() &&
(player.get(0).getX() == playerDest.get(0).getX()) &&
(player.get(0).getY() == playerDest.get(0).getY())){
for(int i = 1; i < getSize(); i++){
if(playerDest.get(i).getX() != player.get(i-1).getX()){
playerDest.get(i).setX(player.get(i - 1).getX());
}
else if(playerDest.get(i).getY() != player.get(i-1).getY()){
playerDest.get(i).setY(player.get(i - 1).getY());
}
}
if(left){
playerDest.get(0).setX(player.get(0).getX() - blockSize);
}
else if(right){
playerDest.get(0).setX(player.get(0).getX() + blockSize);
}
else if(up){
playerDest.get(0).setY(player.get(0).getY() - blockSize);
}
else if(down){
playerDest.get(0).setY(player.get(0).getY() + blockSize);
}
}
else{
for(int i = 0; i < getSize(); i++){
if(up || down){
if(player.get(i).getX() != playerDest.get(i).getX()){
player.get(i).setX(player.get(i).getX() + MoveDirection(playerDest.get(i).getX(), player.get(i).getX(), moveSpeed));
}
else if(player.get(i).getY() != playerDest.get(i).getY()){
player.get(i).setY(player.get(i).getY() + MoveDirection(playerDest.get(i).getY(), player.get(i).getY(), moveSpeed));
}
}
else if(right || left){
if(player.get(i).getY() != playerDest.get(i).getY()){
player.get(i).setY(player.get(i).getY() + MoveDirection(playerDest.get(i).getY(), player.get(i).getY(), moveSpeed));
}
else if(player.get(i).getX() != playerDest.get(i).getX()){
player.get(i).setX(player.get(i).getX() + MoveDirection(playerDest.get(i).getX(), player.get(i).getX(), moveSpeed));
}
}
private float MoveDirection(float to, float from, float moveSpeed){
if(to - from > 0){
return 1;
}
else if(to - from < 0){
return -1;
}
else{
return 0;
}
}
이제이 사소한 변경 사항은 MoveDirection() 메서드 내에 있으며 거리를 다시 조정합니다. 이것은 단지 이동 속도의 변수를 추가하는 것입니다.
if(left){
playerDest.get(0).setX(player.get(0).getX() - moveSpeed);
}
else if(right){
playerDest.get(0).setX(player.get(0).getX() + moveSpeed);
}
else if(up){
playerDest.get(0).setY(player.get(0).getY() - moveSpeed);
}
else if(down){
playerDest.get(0).setY(player.get(0).getY() + moveSpeed);
}
private float MoveDirection(float to, float from, float moveSpeed){
return Integer.signum((int)to - (int) from) * moveSpeed;
}
플레이어가 움직이는 방식을 약간 변경하는 이유는 무엇입니까? 게임이 얼마나 빨리 재생되는지에 따라, 나는 그것을 가치로 사용해야합니다. 따라서 변수 delta
과 float moveSpeed;
왜 사소한 변경으로 인해 내 흔적이 뭉툭 해지고 방향을 따르지 않는지 이해할 수 없습니다. 지금 여러 가지 방법을 시도해 왔습니다. 어떤 도움이라도 대단히 감사합니다!
감사합니다.
자신과 (내 눈을) 부탁하고'player.get (i)'의 모든 항목을 공통 변수로 추출하십시오. 현대 IDE가 도움이 될 것입니다. –
@SeanPatrickFloyd 나는 그것에 대해 생각했지만 내 버그를 고치기 때문에 그것을하지 못했습니다. =) – Twister1002