我有一个800x480的屏幕尺寸,我玩游戏。 我有大小为60x120的瓷砖,我将它放在屏幕上的某个位置。从一开始我创建了8个瓷砖,见下图。瓷砖总是从右向左移动。当图块不在屏幕上时,我会在新位置重新创建图块。我遇到的问题是瓷砖不是确定性的,一些瓷砖在移动到新位置时会相互重叠。
下面的代码检查磁贴位置。如果图块在屏幕之外,则图块将移动到新位置。我现在遇到的问题是瓷砖有时会相互重叠。我该如何解决这个问题呢?
tileX += speedX; // speedX is the speed of tiles moving to the left.
if(tileX <= -60){ // Checks if tile position is out of screen
tileX += 840;
}
答案 0 :(得分:2)
我不会只是将任意值添加到tileX的位置,而是找到一个可以设置它的数字,以便它可以一致地移动。
if(tileX <= -60){
tileX = 780;
}
例如。
如果这不起作用,您可能需要在游戏循环中发布更多代码才能找到问题。
答案 1 :(得分:1)
由于缺乏信息,我不得不猜测你的算法,移动瓷砖是如何工作的。但我建议(作为讨论的工作副本)我会想出一个算法。重要的是我确实在一个单独的循环中向左移动所有的瓷砖。否则,如果移动Tile,如果它向左移动,则将其从List中删除并将其添加到List的末尾,您将处理它两次。您的代码中是否存在这种情况?
从最左侧到最右侧,所有图块都在列表中排序。算法保持这种方式。循环首先处理最左边的循环以避免重叠(即使它们还没有被绘制)。如上所述,由于缺乏信息,这是一个猜测。
public interface Tile {
public void moveLeft(int pixel);
public void moveRight(int pixel);
public int getX();
}
public static void main(String[] args) {
int speedX = 20;
List<Tile> tiles = getMovingTiles();
for (Tile tile : tiles) tile.moveLeft(speedX);
while (tiles.get(0).getX() <= -60) {
Tile tile = tiles.remove(0);
tile.moveRight(840);
tiles.add(tile);
}
}
private static List<Tile> getMovingTiles() {
throw new UnsupportedOperationException("not yet implemented");
}
== UPDATE ==
更有效的算法蓝图:
public interface Tile {
public void moveLeft(int pixel);
public int getX();
public void setX(int pixel);
}
public static void moveTiles(List<Tile> tiles, int speed, int offScreen, int startPos) {
tiles.add(null);
for (int idx = 0; tiles.get(idx) != null;) {
Tile tile = tiles.get(idx);
tile.moveLeft(speed);
if (tile.getX() <= offScreen) {
tile.setX(startPos);
tiles.add(tiles.remove(idx));
} else idx++;
}
tiles.remove(null);
}