type NotCopyPropertyInCompressedMap = | 'firstArrive' | 'eachArrive' | 'blocks' | 'parallelDo' | 'map' | 'bgmap' | 'fgmap' | 'events' | 'changeFloor' | 'beforeBattle' | 'afterBattle' | 'afterGetItem' | 'afterOpenDoor' | 'cannotMove' | 'cannotMoveIn'; /** * 压缩后的地图 */ type CompressedMap = Omit< Floor, NotCopyPropertyInCompressedMap >; interface Block = Exclude> { /** * 横坐标 */ x: number; /** * 纵坐标 */ y: number; /** * 图块数字 */ id: N; disable: boolean; /** * 事件信息 */ event: { /** * 图块类型 */ cls: ClsOf; /** * 图块id */ id: NumberToId[N]; /** * 图块动画帧数 */ animate: FrameOf>; /** * 图块是否不可通行 */ noPass: boolean; /** * 图块高度 */ height: 32 | 48; /** * 触发器 */ trigger?: MotaTrigger; /** * 是否可被破 */ canBreak?: boolean; /** * 门信息 */ doorInfo?: DoorInfo; data?: any; script?: string; event?: MotaEvent; }; } interface FloorBase { /** * 楼层id */ floorId: T; /** * 楼层在状态栏的名称 */ name: string; /** * 地图宝石倍率 */ ratio: number; /** * 地图的宽度 */ width: number; /** * 地图的高度 */ height: number; /** * 地板样式 */ defaultGround: AllIds; /** * 楼层贴图 */ image: FloorAnimate[]; /** * 楼层名称 */ title: string; /** * 是否能飞出 */ canFlyFrom: boolean; /** * 是否能飞到 */ canFlyTo: boolean; /** * 是否能使用快捷商店 */ canUseQuickShop: boolean; /** * 是否不可浏览 */ cannotViewMap?: boolean; /** * 是否不能瞬移 */ cannotMoveDirectly?: boolean; /** * 是否是地下层 */ underGround?: boolean; /** * 自动事件 */ autoEvent: Record; /** * 天气 */ weather?: [type: string, level: WeatherLevel]; /** * 事件层地图 */ map: number[][]; /** * 并行脚本 */ parallelDo?: string; /** * 色调 */ color?: Color; /** * 背景音乐 */ bgm?: BgmIds | BgmIds[]; } interface Floor extends FloorBase { /** * 图块信息 */ blocks: Block[]; /** * 是否被砍层 */ deleted?: boolean; /** * 是否被强制砍层 */ forceDelete?: boolean; } interface ResolvedFloor extends FloorBase { /** * 战后事件 */ afterBattle: Record; /** * 获得道具后事件 */ afterGetItem: Record; /** * 开门后事件 */ afterOpenDoor: Record; /** * 战前事件 */ beforeBattle: Record; /** * 不可出方向 */ cannotMove: Record; /** * 不可入方向 */ cannotMoveIn: Record; /** * 普通事件 */ events: Record; /** * 背景层 */ bgmap: number[][]; /** * 前景层 */ fgmap: number[][]; /** * 楼层切换 */ changeFloor: Record; /** * 首次到达事件 */ firstArrive?: MotaEvent; /** * 每次到达事件 */ eachArrive?: MotaEvent; } interface BlockInfo { /** * 图块数字 */ number: T; /** * 图块id */ id: NumberToId[T]; /** * 图块类型 */ cls: ClsOf; /** * 图块名称 */ name: string; /** * 图片信息 */ image: HTMLImageElement; /** * 图块所在图片的横坐标 */ posX: number; /** * 图块所在图片的纵坐标 */ posY: number; /** * 门信息 */ doorInfo: DoorInfo; /** * 图片的高度 */ height: 32 | 48; /** * faceId信息 */ faceIds: Record; /** * 动画帧数 */ animate: FrameOf>; /** * 朝向 */ face: Dir; /** * 大怪物信息 */ bigImage: HTMLImageElement; } interface DrawMapConfig { /** * 是否是重绘 */ redraw: boolean; /** * 要绘制到的画布 */ ctx: CtxRefer; /** * 是否是在地图画布上绘制的 */ onMap: boolean; } interface DrawThumbnailConfig { /** * 勇士的位置 */ heroLoc: LocArr; /** * 勇士的图标 */ heroIcon: ImageIds; /** * 是否绘制显伤 */ damage: boolean; /** * 变量信息,存读档时使用,可以无视 */ flags: Flags; /** * 绘制到的画布 */ ctx: CtxRefer; /** * 绘制位置的横坐标 */ x: number; /** * 绘制位置的纵坐标 */ y: number; /** * 绘制大小,比例数字,例如1代表与实际地图大小相同 */ size: number; /** * 绘制全图 */ all: boolean; /** * 绘制的视野中心横坐标 */ centerX: number; /** * 绘制的视野中心纵坐标 */ centerY: number; /** * 是否不是高清画布,存读档时使用,可以无视 */ noHD: boolean; /** * 是否使用v2优化 */ v2: boolean; /** * 是否在小地图中出现 */ inFlyMap: boolean; /** * 小地图模式下的宽度 */ w: number; /** * 小地图模式下的高度 */ h: number; } interface BlockFilter { /** * 高斯模糊 */ blur: number; /** * 色相旋转 */ hue: number; /** * 饱和度 */ grayscale: number; /** * 反色 */ invert: boolean; /** * 阴影 */ shadow: boolean; } interface SearchedBlock { /** * 横坐标 */ x: number; /** * 纵坐标 */ y: number; /** * 楼层id */ floorId: FloorIds; /** * 图块信息 */ block: Block; } /** * 负责一切和地图相关的处理内容 */ interface Maps { /** * 图块信息 */ blocksInfo: { [P in keyof NumberToId]: MapDataOf

; }; /** * 加载某个楼层 * @param floorId 楼层id * @param map 地图信息,不填表示直接从原地图中获取 */ loadFloor( floorId: T, map?: number[][] | { map: number[][] } ): ResolvedFloor; /** * 解析地图信息 * @param map 地图id或地图对象 */ extractBlocks(map?: FloorIds | ResolvedFloor): void; /** * 根据需求为UI解析出blocks * @param map 地图信息 * @param flags 变量信息 */ extractBlocksForUI(map?: ResolvedFloor, flags?: Record): void; /** * 根据图块id得到数字(地图矩阵中的值) * @example core.getNumberById('yellowWall'); // 1 * @param id 图块id * @returns 图块的数字 */ getNumberById(id: T): IdToNumber[T]; /** * 根据数字获得图块 * @param number 图块数字 */ getBlockByNumber(number: T): Block; /** * 根据ID获得图块 * @param id 图块的id */ getBlockById(id: T): Block; /** * 获得当前事件点的ID */ getIdOfThis(id?: 'this' | AllIds): string; /** * 初始化一个图块 * @param x 横坐标 * @param y 纵坐标 * @param id 图块的id * @param addInfo 是否添加触发器信息等 * @param eventFloor 所在地图信息 */ initBlock( x: number, y: number, id: AllIds | AllNumbers, addInfo?: boolean, eventFloor?: ResolvedFloor ): Block; /** * 压缩地图 * @param mapArr 地图数组 * @param floorId 地图id */ compressMap(mapArr?: number[][], floorId?: FloorIds): number[][]; /** * 设置图块的不透明度 * @param opacity 不透明度 * @param x 横坐标 * @param y 纵坐标 * @param floorId 楼层id */ setBlockOpacity( opacity: number, x: number, y: number, floorId?: FloorIds ): void; /** * 设置图块的滤镜 * @param filter 滤镜信息 * @param x 横坐标 * @param y 纵坐标 * @param floorId 楼层id */ setBlockFilter( filter: string, x: number, y: number, floorId?: FloorIds ): void; /** * 获取某个图块是否被强制启用或禁用 * @param floorId 楼层id * @param x 横坐标 * @param y 纵坐标 * @param flags 变量信息 */ isMapBlockDisabled( floorId: FloorIds, x: number, y: number, flags?: Record ); /** * 设置某个点的图块强制启用/禁用状态 * @param floorId 楼层id * @param x 横坐标 * @param y 纵坐标 * @param disable 是否禁用 */ setMapBlockDisabled( floorId: FloorIds, x: number, y: number, disable: boolean ); /** * 解压缩地图 * @param mapArr 地图信息 * @param floorId 地图id */ decompressMap(mapArr?: number[][], floorId?: FloorIds): number[][]; /** * 将所有地图重新变成数字,以便于存档 */ saveMap(): { [P in FloorIds]?: Partial> }; /** * 将某个地图重新变成数字,以便于存档 */ saveMap(floorId: FloorIds): Partial; /** * 将存档中的地图信息重新读取出来 * @param data 多个楼层的信息 * @param floorId 在这里没有用 * @param flags 变量信息 */ loadMap( data: { [P in T]: Partial> }, floorId?: undefined, flags?: Record ): { [P in T]: ResolvedFloor }; /** * 加载某个楼层的信息 * @param data 多个楼层的信息 * @param floorId 加载的楼层 */ loadMap( data: { [P in T]?: Partial> }, floorId: T ): ResolvedFloor; /** * 更改地图画布的尺寸 * @param floorId 楼层id */ resizeMap(floorId?: FloorIds): void; /** * 生成事件层矩阵 * @example core.getMapArray('MT0'); // 生成主塔0层的事件层矩阵,隐藏的图块视为0 * @param floorId 地图id,不填视为当前地图 * @param noCache 是否清空缓存 * @returns 事件层矩阵,注意对其阵元的访问是[y][x] */ getMapArray(floorId?: FloorIds, noCache?: boolean): AllNumbers[][]; /** * 获取图块的事件层数字 * @param x 横坐标 * @param y 纵坐标 * @param floorId 楼层id * @param noCache 是否清空缓存 */ getMapNumber( x: number, y: number, floorId?: FloorIds, noCache?: boolean ): AllNumbers; /** * 以x,y的形式返回每个点的事件 * @param floorId 楼层id * @param noCache 是否不使用缓存 */ getMapBlocksObj( floorId?: FloorIds, noCache?: boolean ): Record; /** * 获取背景层的图块矩阵 * @param floorId 楼层id */ getBgMapArray(floorId: FloorIds): AllNumbers[][]; /** * 获取前景层的图块矩阵 * @param floorId 楼层id */ getFgMapArray(floorId: FloorIds): AllNumbers[][]; /** * 判定背景层的一个位置是什么 * @example core.getBgNumber(); // 判断主角脚下的背景层图块的数字 * @param x 横坐标,不填为当前勇士坐标 * @param y 纵坐标,不填为当前勇士坐标 * @param floorId 地图id,不填视为当前地图 * @param noCache 是否不使用缓存 */ getBgNumber( x?: number, y?: number, floorId?: FloorIds, noCache?: boolean ): AllNumbers; /** * 判定前景层的一个位置是什么 * @example core.getFgNumber(); // 判断主角脚下的前景层图块的数字 * @param x 横坐标,不填为当前勇士坐标 * @param y 纵坐标,不填为当前勇士坐标 * @param floorId 地图id,不填视为当前地图 * @param noCache 是否不使用缓存 */ getFgNumber( x?: number, y?: number, floorId?: FloorIds, noCache?: boolean ): AllNumbers; /** * 可通行性判定 * @example core.generateMovableArray(); // 判断当前地图主角从各点能向何方向移动 * @param floorId 地图id,不填视为当前地图 * @returns 从各点可移动方向的三维数组 */ generateMovableArray(floorId?: FloorIds): Dir[][][]; /** * 单点单朝向的可通行性判定,不判断nopass * @exmaple core.canMoveHero(); // 判断主角是否可以前进一步 * @param x 起点横坐标,不填视为主角当前的 * @param y 起点纵坐标,不填视为主角当前的 * @param direction 移动的方向,不填视为主角面对的方向 * @param floorId 地图id,不填视为当前地图 * @returns true表示可移动,false表示不可移动 */ canMoveHero( x?: number, y?: number, direction?: Dir, floorId?: FloorIds ): boolean; /** * 能否瞬移到某点,并求出节约的步数。 * @example core.canMoveDirectly(0, 0); // 能否瞬移到地图左上角 * @param destX 目标点的横坐标 * @param destY 目标点的纵坐标 * @returns 正数表示节约的步数,-1表示不可瞬移 */ canMoveDirectly(destX: number, destY: number): number; /** * 获得某些点可否通行的信息 * @param locs 目标路径 * @param canMoveArray 可通行信息 */ canMoveDirectlyArray(locs: LocArr[], canMoveArray?: Dir[][][]): number[]; /** * 自动寻路 * @example core.automaticRoute(0, 0); // 自动寻路到地图左上角 * @param destX 目标点的横坐标 * @param destY 目标点的纵坐标 * @returns 每步走完后主角的loc属性组成的一维数组 */ automaticRoute(destX: number, destY: number): DiredLoc[]; /** * 绘制一个图块 * @param block 要绘制的图块 * @param animate 绘制图块的第几帧 * @param ctx 绘制到的画布 */ drawBlock(block?: Block, animate?: number, ctx?: CtxRefer): void; /** * 生成groundPattern * @param floorId 楼层id */ generateGroundPattern(floorId?: FloorIds): void; /** * 地图绘制 * @example core.drawMap(); // 绘制当前地图 * @param floorId 地图id,不填表示当前楼层 */ drawMap(floorId?: FloorIds): void; /** * 重绘地图 */ redrawMap(): void; /** * 绘制背景层(含贴图,其与背景层矩阵的绘制顺序可通过复写此函数来改变) * @example core.drawBg(); // 绘制当前地图的背景层 * @param floorId 地图id,不填视为当前地图 * @param config 配置信息 */ drawBg(floorId?: FloorIds, config?: Partial): void; /** * 绘制事件层 * @example core.drawEvents(); // 绘制当前地图的事件层 * @param floorId 地图id,不填视为当前地图 * @param blocks 一般不需要 * @param config 配置信息 */ drawEvents( floorId?: FloorIds, blocks?: Block[], config?: Partial ): void; /** * 绘制前景层(含贴图,其与前景层矩阵的绘制顺序可通过复写此函数来改变) * @example core.drawFg(); // 绘制当前地图的前景层 * @param floorId 地图id,不填视为当前地图 * @param config 配置信息 */ drawFg(floorId?: FloorIds, config?: Partial): void; /** * 绘制缩略图 * @example core.drawThumbnail(); // 绘制当前地图的缩略图 * @param floorId 地图id,不填视为当前地图 * @param blocks 一般不需要 * @param options 额外的绘制项,可以增绘主角位置和朝向、采用不同于游戏中的主角行走图、增绘显伤、提供flags用于存读档 */ drawThumbnail( floorId?: FloorIds, blocks?: Block[], options?: Partial ): void; /** * 判定某个点是否不可被踏入(不基于主角生命值和图块cannotIn属性) * @example core.noPass(0, 0); // 判断地图左上角能否被踏入 * @param x 目标点的横坐标 * @param y 目标点的纵坐标 * @param floorId 目标点所在的地图id,不填视为当前地图 */ noPass(x: number, y: number, floorId?: FloorIds): boolean; /** * 某个点是否存在NPC * @param x 横坐标 * @param y 纵坐标 * @param floorId 楼层id */ npcExists(x: number, y: number, floorId?: FloorIds): boolean; /** * 某个点是否存在(指定的)地形 * @param x 横坐标 * @param y 纵坐标 * @param id 地形的id * @param floorId 楼层id */ terrainExists( x: number, y: number, id?: AllIdsOf<'terrains'>, floorId?: FloorIds ): boolean; /** * 某个点是否存在楼梯 * @param x 横坐标 * @param y 纵坐标 * @param floorId 楼层id */ stairExists(x: number, y: number, floorId?: FloorIds): boolean; /** * 当前位置是否在楼梯边;在楼传平面塔模式下对箭头也有效 */ nearStair(): boolean; /** * 某个点是否存在(指定的)怪物 * @param x 横坐标 * @param y 纵坐标 * @param id 怪物的id * @param floorId 楼层id */ enemyExists( x: number, y: number, id?: AllIdsOf<'enemys' | 'enemy48'>, floorId?: FloorIds ): boolean; /** * 获得某个点的block * @param x 横坐标 * @param y 纵坐标 * @param floorId 楼层id * @param showDisable 被禁用的图块是否也能被获取 */ getBlock( x: number, y: number, floorId?: FloorIds, showDisable?: boolean ): Block; /** * 判定某个点的图块id * @example * // 一个简单的机关门事件,打败或炸掉这一对绿头怪和红头怪就开门 * if ( * core.getBlockId(x1, y1) !== 'greenSlime' && * core.getBlockId(x2, y2) !== 'redSlime' * ) * core.openDoor(x3, y3); * @param x 横坐标 * @param y 纵坐标 * @param floorId 地图id,不填视为当前地图 * @param showDisable 被禁用的图块是否也能被获取 * @returns 图块id,该点无图块则返回null */ getBlockId( x: number, y: number, floorId?: FloorIds, showDisable?: boolean ): AllIds | null; /** * 判定某个点的图块数字 * @param x 横坐标 * @param y 纵坐标 * @param floorId 地图id,不填视为当前地图 * @param showDisable 被禁用的图块是否也能被获取 */ getBlockNumber( x: number, y: number, floorId?: FloorIds, showDisable?: boolean ): AllNumbers; /** * 判定某个点的图块类型 * @example * // 另一个简单的机关门事件,打败或炸掉这一对不同身高的敌人就开门 * if (core.getBlockCls(x1, y1) !== 'enemys' && core.getBlockCls(x2, y2) !== 'enemy48') core.openDoor(x3, y3); * @param x 横坐标 * @param y 纵坐标 * @param floorId 地图id,不填视为当前地图 * @param showDisable 被禁用的图块是否也能被获取 */ getBlockCls( x: number, y: number, floorId?: FloorIds, showDisable?: boolean ): Cls | null; /** * 获取图块的不透明度 * @param x 横坐标 * @param y 纵坐标 * @param floorId 地图id,不填视为当前地图 * @param showDisable 被禁用的图块是否也能被获取 */ getBlockOpacity( x: number, y: number, floorId?: FloorIds, showDisable?: boolean ): number | null; /** * 获取图块的滤镜 * @param x 横坐标 * @param y 纵坐标 * @param floorId 地图id,不填视为当前地图 * @param showDisable 被禁用的图块是否也能被获取 */ getBlockFilter( x: number, y: number, floorId?: FloorIds, showDisable?: boolean ): BlockFilter | null; /** * 获得某个图块或素材的信息 * @param block 图块信息,可以填图块,数字,id */ getBlockInfo( block?: Block | NumberToId[T] | T ): BlockInfo; /** * 搜索图块, 支持通配符 * @example core.searchBlock('*Door'); // 搜索当前地图的所有门 * @param id 图块id,支持星号表示任意多个(0个起)字符 * @param floorId 地图id,不填视为当前地图 * @param showDisable 隐藏点是否计入,true表示计入 */ searchBlock( id: string, floorId?: FloorIds | FloorIds[], showDisable?: boolean ): SearchedBlock[]; /** * 根据给定的筛选函数搜索全部满足条件的图块 * @example * // 搜索当前地图的所有门 * core.searchBlockWithFilter(function (block) { return block.event.id.endsWith('Door'); }); * @param blockFilter 筛选函数,可接受block输入,应当返回一个boolean值 * @param floorId 地图id,不填视为当前地图 * @param showDisable 隐藏点是否计入,true表示计入 * @returns 一个详尽的数组 */ searchBlockWithFilter( blockFilter: (block: Block) => boolean, floorId?: FloorIds | FloorIds[], showDisable?: boolean ): SearchedBlock[]; /** * 获得某个图块对应行走图朝向向下的那一项的id,如果不存在行走图绑定则返回自身id * @param block 要获得的图块 */ getFaceDownId(block: Block | AllIds | AllNumbers): AllIds; /** * 显示(隐藏或显示的)图块,此函数将被“显示事件”指令和勾选了“不消失”的“移动/跳跃事件”指令(如阻击怪)的终点调用 * @example core.showBlock(0, 0); // 显示地图左上角的图块 * @param x 横坐标 * @param y 纵坐标 * @param floorId 地图id,不填视为当前地图 */ showBlock(x: number, y: number, floorId?: FloorIds): void; /** * 隐藏一个图块,对应于「隐藏事件」且不删除 * @example core.hideBlock(0, 0); // 隐藏地图左上角的图块 * @param x 横坐标 * @param y 纵坐标 * @param floorId 地图id,不填视为当前地图 */ hideBlock(x: number, y: number, floorId?: FloorIds): void; /** * 根据图块的索引来隐藏图块 * @param index 要隐藏的图块的索引 * @param floorId 地图id */ hideBlockByIndex(index: number, floorId?: FloorIds): void; /** * 一次性隐藏多个block * @param indexes 索引列表 * @param floorId 地图id */ hideBlockByIndexes(indexes: number[], floorId?: FloorIds): void; /** * 删除一个图块,对应于「隐藏事件」并同时删除 * @example core.removeBlock(0, 0); // 尝试删除地图左上角的图块 * @param x 横坐标 * @param y 纵坐标 * @param floorId 地图id,不填视为当前地图 * @returns 有没有删除成功 */ removeBlock(x: number, y: number, floorId?: FloorIds): boolean; /** * 根据block的索引(尽可能)删除该块 * @param index 要删除的图块的索引 * @param floorId 地图id */ removeBlockByIndex(index: number, floorId?: FloorIds): void; /** * 一次性删除多个block * @param indexes 索引列表 * @param floorId 地图id */ removeBlockByIndexes(indexes: number[], floorId?: FloorIds): void; /** * 显示前景/背景地图 * @param name 图层名 * @param loc 要显示的坐标列表 * @param floorId 楼层id * @param callback 显示完毕的回调函数 */ showBgFgMap( name: 'bg' | 'bg2' | 'fg' | 'fg2', loc: LocArr | LocArr[], floorId?: FloorIds, callback?: () => void ): void; /** * 隐藏前景/背景地图 * @param name 图层名 * @param loc 要显示的坐标列表 * @param floorId 楼层id * @param callback 显示完毕的回调函数 */ hideBgFgMap( name: 'bg' | 'bg2' | 'fg' | 'fg2', loc: LocArr | LocArr[], floorId?: FloorIds, callback?: () => void ): void; /** * 显示一个楼层贴图 * @param loc 楼层贴图的位置 * @param floorId 楼层id * @param callback 显示完毕后的回调函数 */ showFloorImage( loc?: LocArr | LocArr[], floorId?: FloorIds, callback?: () => void ): void; /** * 隐藏一个楼层贴图 * @param loc 楼层贴图的位置 * @param floorId 楼层id * @param callback 显示完毕后的回调函数 */ hideFloorImage( loc?: LocArr | LocArr[], floorId?: FloorIds, callback?: () => void ): void; /** * 转变图块 * @example core.setBlock(1, 0, 0); // 把地图左上角变成黄墙 * @param number 新图块的数字或id * @param x 横坐标 * @param y 纵坐标 * @param floorId 地图id,不填视为当前地图 * @param noredraw 是否不重绘地图 */ setBlock( number: AllIds | AllNumbers | `${AllNumbers}`, x: number, y: number, floorId?: FloorIds, noredraw?: boolean ): void; /** * 动画形式转变某点图块 * @param number 要转变成的图块的数字或id * @param x 横坐标 * @param y 纵坐标 * @param floorId 楼层id * @param time 转变时间 * @param callback 转变开始或完成后的回调函数 */ animateSetBlock( number: AllIds | AllNumbers | `${AllNumbers}`, x: number, y: number, floorId?: FloorIds, time?: number, callback?: () => void ): void; /** * 动画形式转变若干点图块 * @param number 要转变成的图块的数字或id * @param locs 坐标数组 * @param floorId 楼层id * @param time 转变时间 * @param callback 转变开始或完成后的回调函数 */ animateSetBlocks( number: AllIds | AllNumbers | `${AllNumbers}`, locs: LocArr | LocArr[], floorId?: FloorIds, time?: number, callback?: () => void ): void; /** * 某个图块转向 * @param direction 转向的方向 * @param x 图块所在横坐标 * @param y 图块所在纵坐标 * @param floorId 楼层id */ turnBlock( direction: HeroTurnDir, x: number, y: number, floorId?: FloorIds ): void; /** * 批量替换图块 * @example core.replaceBlock(21, 22, core.floorIds); // 把游戏中地上当前所有的黄钥匙都变成蓝钥匙 * @param fromNumber 旧图块的数字 * @param toNumber 新图块的数字 * @param floorId 地图id或其数组,不填视为当前地图 */ replaceBlock( fromNumber: AllNumbers, toNumber: AllNumbers, floorId?: FloorIds | FloorIds[] ): void; /** * 转变图层块 * @example core.setBgFgBlock('bg', 167, 6, 6); // 把当前地图背景层的中心块改为滑冰 * @param name 背景还是前景 * @param number 新图层块的数字或id * @param x 横坐标 * @param y 纵坐标 * @param floorId 地图id,不填视为当前地图 */ setBgFgBlock( name: 'bg' | 'fg' | 'bg2' | 'fg2', number: AllIds | AllNumbers | `${AllNumbers}`, x: number, y: number, floorId?: FloorIds ): void; /** * 重置地图,注意该功能原则上只用于调试,游戏中不应当出现 * @param floorId 楼层id或数组 */ resetMap(floorId?: FloorIds | FloorIds[]): void; /** * 移动图块 * @example core.moveBlock(0, 0, ['down']); // 令地图左上角的图块下移一格,用时半秒,再花半秒淡出 * @param x 起点的横坐标 * @param y 起点的纵坐标 * @param steps 步伐数组 * @param time 单步和淡出用时,单位为毫秒。不填视为半秒 * @param keep 是否不淡出,true表示不淡出 * @param callback 移动或淡出后的回调函数 */ moveBlock( x: number, y: number, steps: Step[], time?: number, keep?: boolean, callback?: () => void ): void; /** * 跳跃图块;从V2.7开始不再有音效 * @example core.jumpBlock(0, 0, 0, 0); // 令地图左上角的图块原地跳跃半秒,再花半秒淡出 * @param sx 起点的横坐标 * @param sy 起点的纵坐标 * @param ex 终点的横坐标 * @param ey 终点的纵坐标 * @param time 单步和淡出用时,单位为毫秒。不填视为半秒 * @param keep 是否不淡出,true表示不淡出 * @param callback 落地或淡出后的回调函数 */ jumpBlock( sx: number, sy: number, ex: number, ey: number, time?: number, keep?: boolean, callback?: () => void ): void; /** * 显示/隐藏某个块时的动画效果 * @param loc 要显示或隐藏的坐标数组 * @param type 显示还是隐藏还是移除,填数字表示设置不透明度 * @param time 动画时间 * @param callback 动画完毕后的回调函数 */ animateBlock( loc: LocArr | LocArr[], type: 'show' | 'hide' | 'remove' | number, time: number, callback?: () => void ): void; /** * 添加一个全局动画 * @param block 图块信息 */ addGlobalAnimate(block?: Block): void; /** * 删除所有全局动画 */ removeGlobalAnimate(): void; /** * 删除一个全局动画 * @param x 横坐标 * @param y 纵坐标 */ removeGlobalAnimate(x?: number, y?: number): void; /** * 绘制UI层的box动画 */ drawBoxAnimate(): void; /** * 播放动画,注意即使指定了主角的坐标也不会跟随主角移动,如有需要请使用core.drawHeroAnimate(name, callback)函数 * @example core.drawAnimate('attack', core.nextX(), core.nextY(), false, core.vibrate); // 在主角面前一格播放普攻动画,动画停止后视野左右抖动1秒 * @param name 动画文件名,不含后缀 * @param x 绝对横坐标 * @param y 绝对纵坐标 * @param alignWindow 是否是相对窗口的坐标 * @param callback 动画停止后的回调函数 * @returns 一个数字,可作为core.stopAnimate()的参数来立即停止播放(届时还可选择是否执行此次播放的回调函数) */ drawAnimate( name: AnimationIds | NameMapIn, x: number, y: number, alignWindow?: boolean, callback?: () => void ): number; /** * 播放跟随勇士的动画 * @param name 动画名 * @param callback 动画停止后的回调函数 * @returns 一个数字,可作为core.stopAnimate()的参数来立即停止播放(届时还可选择是否执行此次播放的回调函数) */ drawHeroAnimate( name: AnimationIds | NameMapIn, callback?: () => void ): number; /** * 获得当前正在播放的所有(指定)动画的id列表 * @param name 指定名称 */ getPlayingAnimates(name?: AnimationIds): number[]; /** * 立刻停止一个动画播放 * @param id 播放动画的编号,即drawAnimate或drawHeroAnimate返回值,不填则停止所有的 * @param doCallback 是否执行该动画的回调函数 */ stopAnimate(id?: number, doCallback?: boolean): void; _makeAutotileEdges(): void; _initDetachedBlock( info: BlockInfo, x: number, y: number, displayDamage: boolean ): { headCanvas: string | null; bodyCanvas: string; damageCanvas: string | null; }; _getBigImageInfo(bigImage: HTMLImageElement, face: Dir, posX: number): any; } declare const maps: new () => Maps;