MapApi.hasBridgeOnTile(tile)、hasHighBridgeOnTile(tile)
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/1229
以下兩個方法都屬於 MapApi,其宣告可在套件的 index.d.ts
找到:
688 getTile(rx: number, ry: number): Tile | undefined;
689 getTilesInRect(rectangle: Rectangle): Tile[];
690 getTilesInRect(baseTile: Tile, size: Size): Tile[];
691 getObjectsOnTile(tile: Tile): number[];
692 hasBridgeOnTile(tile: Tile): boolean;
693 hasHighBridgeOnTile(tile: Tile): boolean;
在壓縮後的實作中,兩個函式緊接著出現,邏輯十分簡單:
...getObjectsOnTile(e){return Op(this,Cp,"f").getObjectsOnTile(e).map(e=>e.id)}
hasBridgeOnTile(e){return!!e.onBridgeLandType}
hasHighBridgeOnTile(e){return!!Op(this,Cp,"f").tileOccupation.getBridgeOnTile(e)?.isHighBridge()}
isPassableTile(e,t,i,s){...
hasBridgeOnTile(tile)
只要該 Tile 的 onBridgeLandType
屬性存在(代表此格上有橋面),就會回傳 true
。
hasHighBridgeOnTile(tile)
透過內部 tileOccupation.getBridgeOnTile(tile)
取得橋梁物件,再判斷 isHighBridge()
,用來分辨普通橋或高架橋。
簡易範例
import { cdapi, Bot, GameApi, Vector2 } from "@chronodivide/game-api";
class BridgeCheckerBot extends Bot {
onGameStart(game: GameApi) {
const tile = game.mapApi.getTile(40, 30);
if (!tile) return;
if (game.mapApi.hasBridgeOnTile(tile)) {
if (game.mapApi.hasHighBridgeOnTile(tile)) {
console.log("該格有高架橋");
} else {
console.log("該格有普通橋");
}
} else {
console.log("此處沒有橋");
}
}
}
async function main() {
await cdapi.init(process.env.MIX_DIR!);
await cdapi.createGame({
agents: [new BridgeCheckerBot("Scout", "Americans")],
mapName: "mp03t4.map",
shortGame: true,
online: false,
});
}
main().catch(console.error);
以上程式在遊戲開始時先取得指定座標的 Tile,再依序呼叫 hasBridgeOnTile
與 hasHighBridgeOnTile
判斷是否存在橋梁以及橋的種類。
在自動尋路或放置建築時,可利用這兩個方法快速了解某格是否被橋佔據,並視需要區分高架橋或普通橋。這對於避免在橋梁上誤放建築或規劃通行路徑時尤為重要。
→返回《@chronodivide/game-api 使用教學與完整 API 對照表》
This article was last edited at