所以我的问题很简单......但让它像那样工作是另一回事。所以我会立即开始!了解如何沿着改变的路径移动路径
目的:我正在尝试制作一个像游戏一样的蛇,并且我遇到了路径跟踪问题。我已经使用过DID工作的以前的方法,但是,我试图消除“目标”对象,所以蛇有自由移动的感觉,而不是网格的感觉。
我的问题是当我开始重写我的球员课程时,我摆脱了很多冗余的东西。我的最终任务是解决路径如何移动。我希望线索能够通过滑入位置来追踪它的踪迹。
我写的代码工作之前(网格感觉):
public void Move(int delta){
// double moveSpeed = (delta * .6f) - (oreWeight * ore + armorWeight * armor);
//Smooth animation for snake movement
if(IsMoving() && (X.equals(destX) && Y.equals(destY))){
for(int i = 1; i < getSize(); i++){
if(destX.get(i).intValue() != X.get(i-1).intValue()){
destX.set(i, X.get(i-1));
}
else if(destY.get(i).intValue() != Y.get(i-1).intValue()){
destY.set(i, Y.get(i-1));
}
}
if(left){
destX.set(0, destX.get(0) - GameBoardNew.blockSize);
}
else if(right){
destX.set(0, destX.get(0) + GameBoardNew.blockSize);
}
else if(up){
destY.set(0, destY.get(0) - GameBoardNew.blockSize);
}
else if(down){
destY.set(0, destY.get(0) + GameBoardNew.blockSize);
}
}
else{
for(int i = 0; i < getSize(); i++){
if(up || down){
if(X.get(i).intValue() != destX.get(i).intValue()){
X.set(i, X.get(i) + Integer.signum(destX.get(i) - X.get(i)));
}
else if(Y.get(i).intValue() != destY.get(i).intValue()){
Y.set(i, Y.get(i) + Integer.signum(destY.get(i) - Y.get(i)));
}
}
if(right || left){
if(Y.get(i).intValue() != destY.get(i).intValue()){
Y.set(i, Y.get(i) + Integer.signum(destY.get(i) - Y.get(i)));
}
else if(X.get(i).intValue() != destX.get(i).intValue()){
X.set(i, X.get(i) + Integer.signum(destX.get(i) - X.get(i)));
}
}
}
}
}
而现在,因为我已经重新设计它,我将在多快的球员与其他一起行进的速度条件,同时试图摆脱公式的目标部分,并用它的身体来解决这个问题。然而,我的工作,直到玩家在不同的方向快速移动......然后身体聚集在一起。它基本上是相同的公式,但仍然非常困惑。
public void Move(int delta){
// float moveSpeed = (playerSpeed - (oreWeight * getSize() + armorWeight * armor)) * delta;
float moveSpeed = 1f;
if(IsMoving() && player.get(0).getX() == playerDest.get(0).getX()){
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{
playerDest.get(i).setY(player.get(i - 1).getY());
}
}
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);
}
}
for(int i = 0; i < getSize(); i++){
Rectangle location = player.get(i);
Rectangle inFront = playerDest.get(i);
int xVel = Integer.signum((int)inFront.getX() - (int)location.getX());
int yVel = Integer.signum((int)inFront.getY() - (int)location.getY());
if(up || down){
if(location.getX() != inFront.getX()){
if(xVel == 1){
location.setX(location.getX() + moveSpeed);
}
else if(xVel == -1){
location.setX(location.getX() - moveSpeed);
}
}
else if(location.getY() != inFront.getY()){
if(yVel == 1){
location.setY(location.getY() + moveSpeed);
}
else if(yVel == -1){
location.setY(location.getY() - moveSpeed);
}
}
}
else if(right || left){
if(location.getY() != inFront.getY()){
if(yVel == 1){
location.setY(location.getY() + moveSpeed);
}
else if(yVel == -1){
location.setY(location.getY() - moveSpeed);
}
}
else if(location.getX() != inFront.getX()){
if(xVel == 1){
location.setX(location.getX() + moveSpeed);
}
else if(xVel == -1){
location.setX(location.getX() - moveSpeed);
}
}
}
}
}
如果我需要澄清的任何信息,我会很高兴;只问!
感谢您花时间阅读本文!
你能澄清你的意思是“网格感”吗?任何时候你使用不同的整数数字,它会产生一个类似网格的环境。离散数据类型如浮点数(即小数)通常用于“自由移动”系统。 – asteri 2013-04-30 14:09:33
我的网格感的含义,玩家的目的地被设置为它的大小,例如,这是20px。所以玩家必须先移动20px才能接受不同的方向。只是用完整的方法更新了主帖。 – Twister1002 2013-04-30 14:12:33