MapApi.isVisibleTile(tile, playerName, tileElevation?)
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1232
在 MapApi 中,isVisibleTile(tile, playerName, tileElevation?)
用來判斷某格子在指定高度是否已被玩家揭露(即不在迷霧或戰爭迷霧之下)。
型別聲明位於 index.d.ts
,並給出簡短說明:
705 findPath(speedType: SpeedType, from: PathNode, to: PathNode, options?: PathFinderOptions): PathNode[];
706 /** If the tile is not covered by shroud for the specified player */
707 isVisibleTile(tile: Tile, playerName: string, tileElevation?: number): boolean;
708 getTileResourceData(tile: Tile): TileResourceData | undefined;
在壓縮後的實現中,函數會先取得玩家對象,再利用地圖的 mapShroudTrait
檢查該位置是否被迷霧遮蔽。如果未遮蔽,就返回 true
:
}isVisibleTile(e,t,i=0){var s=Op(this,Ip,"f").getPlayerByName(t);if(!s)throw new Error(`Player "${t}" doesn't exist`);return!Op(this,Ip,"f").mapShroudTrait.getPlayerShroud(s)?.isShrouded(e,i)}getTileResourceData(e){...
【F:node_modules/@chronodivide/game-api/dist/index.js†byte787840-788099】
使用情境
倉庫中的多個模組會借由 isVisibleTile
判斷目標地點是否已被探明,例如在偵查任務完成後移除目標:
if (gameApi.mapApi.isVisibleTile(targetTile, playerData.name)) {
this.logger(
`Scout target ${this.scoutTarget.x},${this.scoutTarget.y} successfully scouted, moving to next`,
);
this.setScoutTarget(null, gameApi.getCurrentTick());
}
另一處例子是在地圖模組計算可見格數時遍歷範圍並統計:
for (let xx = startPoint.x; xx < endPoint.x; ++xx) {
for (let yy = startPoint.y; yy < endPoint.y; ++yy) {
let tile = mapApi.getTile(xx, yy);
if (tile) {
++validTiles;
if (mapApi.isVisibleTile(tile, playerData.name)) {
++visibleTiles;
}
}
}
}
簡易示例
import { cdapi, Bot, GameApi } from "@chronodivide/game-api";
class VisibilityCheckBot extends Bot {
onGameStart(game: GameApi) {
const tile = game.mapApi.getTile(40, 30);
if (!tile) return;
// 默認只檢查地表 (tileElevation = 0)
const visible = game.mapApi.isVisibleTile(tile, this.name);
console.log(`Tile (40,30) visible: ${visible}`);
// 若要檢查其他高度,可傳入第三個參數
const bridgeVisible = game.mapApi.isVisibleTile(tile, this.name, 1);
console.log(`Tile (40,30) at elevation 1 visible: ${bridgeVisible}`);
}
}
async function main() {
await cdapi.init(process.env.MIX_DIR!);
await cdapi.createGame({
agents: [new VisibilityCheckBot("Observer", "Americans")],
mapName: "mp03t4.map",
shortGame: true,
online: false,
});
}
main().catch(console.error);
此 bot 在開局時取得 (40,30)
的格子,然後分別檢查默認高度與指定高度是否對自己可見。isVisibleTile
的第三個參數可用來處理高架橋等情況;若省略則默認為 0。
綜合來看,isVisibleTile
適用於判定某格是否已被我方視野探測到,常用於偵查邏輯或統計地圖上已探索區域。通過取得玩家的霧罩數據並確認格子是否被遮蔽,就能快速獲知當前可見狀況。
→返回《@chronodivide/game-api 使用教學與完整 API 對照表》
This article was last edited at