2016-09-25 25 views
0

这是一个链接到我记录我的问题的视频:https://sendvid.com/rjpi6vnw 你会注意到,最初,我开始在瓷砖(0,0),然后多次上下移动我的角色,屏幕只会上升到(1,0)。所以我失去了一整行可玩的地图。当我的屏幕自行调整时,我只丢失了部分地图。你会明白我的意思。我有一个叫做Player的类,里面有一个叫做moveRight(),moveLeft(),moveUp()和moveDown()的方法。我排除了所有无用的类和方法,以免浪费你的时间。这里是我的下移(),并为moveUp()方法:为什么我的地图视图在每次移动时永久地向下递增?

public void moveUp(){ 
     locY1 -= defaultMoveAmount; 
     if(viewShouldMoveVertically(locX1, locY1) == true){ //locX1 and locY1 refers to the player's bounds location as set by setBounds() 
      Display.uni.moveMapDown(defaultMoveAmount); //Display.uni just means in the Display class 
     } 
    } 
    public void moveDown(){ 
     locY1 += defaultMoveAmount; 
     if(viewShouldMoveVertically(locX1, locY1) == true){ 
      Display.uni.moveMapUp(defaultMoveAmount); //defaultMoveAmount is the # of pixels the player moves each time the program updates 
     } 
    } 

所以我有决定时会调用这些方法KeyListeners。该viewShouldMoveVertically()方法如下:

public boolean viewShouldMoveVertically(int X1, int Y1){ 
     if(Y1 < screenCenterY){ //screenCenterY is the number of vertical pixels on my screen/2 
      return false; 
     } 
     return true; 
    } 

的moveMapUp()或moveMapDown(),然后调用方法在显示类:

int backgroundX1 = 0; 
int backgroundY1 = 0; 
public void moveMapUp(int moveAmt){ 
    backgroundY1 -= moveAmt; 
    background.setBounds(backgroundX1, backgroundY1, backgroundX2 , backgroundY2); 
} 
public void moveMapDown(int moveAmt){ 
    backgroundY1 += moveAmt; 
    background.setBounds(backgroundX1, backgroundY1, backgroundX2 , backgroundY2); 
} 

因此,如果您不能查看在视频我发布的链接,我会描述这个问题。当我的角色靠近地图边缘时,我显然不希望相机显示地图外的区域。所以相机停下来,但我的角色可能会继续走到地图的边界。如果我的角色位于地图顶部的540像素内,相机将不会移动(我在1920x1080显示屏上运行)。这是打算。当我将角色从地图顶部移动超过540像素时,相机现在将随着玩家移动到屏幕中央。但问题是,如果相机最终从地图顶部移开,IF和ONLY,当我再次返回到顶部时,现在我会从可视区域丢失完全“defaultMoveAmount”像素。我似乎无法弄清楚如何解决这个问题。现在,你可能最终想要知道的更多一点:当我垂直移动时,我遇到了同样的问题。它的设置方式相同,所以没有必要让你们阅读额外的代码。在链接上观看视频时,我必须点击左下方的播放按钮,否则它会尝试让我为Chrome或其他内容添加扩展程序。我的程序问题的解决方案最终可能很简单,但我似乎无法弄清楚。我最终厌倦了它,并决定得到一些帮助比现在放弃更好。我是一名编程初学者,因为我只有一年的AP计算科学课程编程经验。我相信你可能会看到一些看起来很愚蠢的东西,我欢迎你提出任何建议或意见,但请注意,我对这些东西相当陌生。主要议案。最后,由于诸如所需的图形等原因,我没有发布可编译的代码部分。当我在这里时,如果您有任何建议或好的参考资料来确定角色是否位于大型瓷砖状地图的某个区域内,例如可以打开的门,那么将不胜感激。

回答

0

我已经解决了这个问题。这里是我的更新viewShouldMoveVertically()方法:

public boolean viewShouldMoveVertically(int X1, int Y1){ 
    if(Y1 <= screenCenterY && previousY1 > screenCenterY){ //if just touched highest camera point from below 
     return true; 
    }else if(Y1 >= mapPixelTotalY-screenCenterY && previousY1 < mapPixelTotalY-screenCenterY){ //if just touched lowest camera point from above 
     return true; 
    } else if(Y1 <= screenCenterY){ //if just touched highest camera point from above or is just above 
     return false; 
    } else if(Y1 >= mapPixelTotalY-screenCenterY){ //If touched lowest camera point from below or is just below 
     return false; 
    } 
    return true; 
} 

事实证明,当玩家按下“从下最高点的相机”或“从上面的摄像头最高点”,需要不同的结果。如果从下面触摸最高的相机视图,相机仍然需要再次向上移动一次。但是当从上面触摸相同的点时,相机不应该移动,因为玩家来自相机不会垂直移动的区域。您可以在代码中看到我的解决方案。另外,我添加了一个“previousY1”,记录了最后一次Y1的值,这样我就可以判断玩家是来自上方还是下方。

相关问题