这是我要执行的命令...
1)保存当前字符的X,Y
2)移动X方向
3)通过获取图块数据来检查字符的所有角,并通过执行以下操作检查其是否牢固:(X和Y是字符位置)
- 左上角:地板(X / tileWidth),地板(Y / tileHeight);
- 右上角:floor((X + characterWidth)/ tileWidth),floor(Y / tileHeight);
- 对于左下角:floor(X + / tileWidth),floor((Y + characterHeight)/ tileHeight);
- 对于右下角:floor((X + characterWidth)/ tileWidth),floor((Y + characterHeight)/ tileHeight);
...从地图数据中获取正确的图块数据
4)如果任何瓷砖是实心的,则需要通过恢复保存的X和...来将X强制到最佳位置。
- 如果您向左移动:X =楼层(X / tileWidth)* tileWidth;
- 如果您向右移动:X =((floor((X + characterWidth)/ tileWidth)+ 1)* tileWidth)-characterWidth;
5)使用Y重复2-4
如果角色比瓷砖高,则需要检查更多瓷砖。为此,您需要循环并将tileHeight添加到characterY位置以获得tile
int characterBlockHeight = 3;
// check all tiles and intermediate tiles down the character body
for (int y = 0; y < characterBlockHeight - 1; y++) {
tile = getTile(floor(characterX / tileWidth), floor((characterY + (y * tileHeight)) / tileHeight));
... check tile OK....
}
// finally check bottom
tile = getTile(floor(characterX / tileWidth), floor((characterY + characterHeight) / tileHeight);
... check tile OK....
如果字符宽于1个块,则执行相同操作,但用characterX,characterWidth等替换characterY,characterHeight,tileHeight等。