我正在阅读现有平台游戏的源代码,我来到这里:
/* assign the horizontal position of the TileMap on the screen to offsetX
* this, center aligns the player. */
int offsetX = width / 2 - Math.round(player.getX()) - TILE_SIZE;
/* stop the map scrolling if the player reaches the two ends
* of the map */
offsetX = Math.min(offsetX, 0); // if offsetX < 0 , offsetX = 0
offsetX = Math.min(offsetX, width-tileMap.getWidth()); //if offsetX > map width, offsetX = mapwidth
int offsetY = height - toPixels(tileMap.getHeight()); // not really necessary, I think
int firstTile = toTiles(-offsetX); // ???
int lastTile = firstTile + toTiles(width) + 1; // why the +1
我评论了一些我认为理解的部分,并在评论中询问了其他部分。
最困扰我的是:
1-如何分配offsetX(width/2 ... ?
)我已经明白它将offsetX分配给地图中某个位置对齐玩家的地方,但我不知道如何。
2 - 在第3行,为什么开发人员写width - tileMap.getWidth()
?
注意:如果逐行解释代码太麻烦,请给我一个粗略的想法,也许用图表?开发人员在这里尝试做什么。感谢。
答案 0 :(得分:1)
1 - 我认为这个偏移是用于绘制瓷砖而不是为了使玩家居中,当玩家移动时,此功能会以负数增加偏移,他移动的距离越远,player.getX()
越高,偏移越高。
示例:
width=300
player.getX()=300
TILE_SIZE=10
tileMap[0]=(x,y)=(10,10)
offset=300/2-300-10
offset= -160
现在这个偏移用于绘制具有负偏移的图块,换句话说,进一步向左,在这种情况下tileMap[0]=(10-160,10)
这意味着tileMap [0]超出了屏幕范围(平铺滚动到左侧,玩家向右滚动)
2 - 我认为这应该是offsetX = Math.max(offsetX, width-tileMap.getWidth());
在这种情况下,它只是一个额外的检查,只滚动到地图的末尾。
示例:
width=300
player.getX()=900
TILE_SIZE=10
tileMap[last]=(1010,10)
tileMap.getWidth()=1000
offset=300/2-900-10
offset= -760
offsetX = Math.min(-760, 0);
offsetX = -760
offsetX = Math.max(-760, 300-1000);
offsetX = -700