全局类 "Isaac"⚓︎
提示
你可以通过全局表Isaac
来获取该类。
访问Isaac类的方法时,需要使用.
(句点)而不是:
(冒号)!
示例代码
1 |
|
函数⚓︎
Add·Callback ()⚓︎
void AddCallback ( table modRef, ModCallback|string callbackId, table callbackFn, int entityId )⚓︎
添加一个MOD回调。
推荐使用Mod Reference的AddCallback函数而非该函数。
Add·Pill·Effect·To·Pool ()⚓︎
int AddPillEffectToPool ( int pillEffect )⚓︎
将一个胶囊效果pillEffect加入到胶囊池中。
返回加入的胶囊的胶囊颜色。
Add·Priority·Callback ()⚓︎
void AddPriorityCallback ( table modRef, ModCallback|string callbackId, CallbackPriority priority, table callbackFn, int entityId )⚓︎
添加一个MOD回调。该回调具有优先级,并根据优先级决定执行顺序。
推荐使用Mod Reference的AddPriorityCallback函数而非该函数。
Console·Output ()⚓︎
void ConsoleOutput ( string text )⚓︎
向控制台打印一行文本。
示例代码
你可以使用该示例作为替代。
1 2 3 4 5 6 |
|
Count·Bosses ()⚓︎
int CountBosses ( )⚓︎
返回本房间内的头目数量。
Count·Enemies ()⚓︎
int CountEnemies ( )⚓︎
返回本房间内的敌人数量。
Count·Entities ()⚓︎
int CountEntities ( Entity Spawner, EntityType Type = EntityType.ENTITY_NULL, int Variant = -1, int SubType = -1 )⚓︎
返回本房间内的满足指定需求的实体数量。
Spawner
为该实体的创建者。(可以为nil
)Type
为该实体的类型。(可以为EntityType.ENTITY_NULL
)Variant
和Subtype
为该实体的变体和子类型。(可以为-1
)
Debug·String ()⚓︎
void DebugString ( string str )⚓︎
向日志文件打印一行文本。你可以在这里找到文件:%systemdrive%\Users\%username%\Documents\My Games\Binding of Isaac Repentance\log.txt
示例代码
这行代码会向log.txt打印"This is a Test."
。
1 2 |
|
Execute·Command ()⚓︎
string ExecuteCommand ( string command )⚓︎
执行一个控制台指令。
关于如何使用指令,见控制台教程。
Explode ()⚓︎
void Explode ( Vector pos, Entity source, float damage )⚓︎
在pos位置生成一次爆炸。其伤害源实体为source,伤害为damage。
Find·By·Type ()⚓︎
table FindByType ( EntityType Type, int Variant = -1, int SubType = -1, boolean Cache = false, boolean IgnoreFriendly = false )⚓︎
返回符合Type,Variant和SubType的所有实体。如果Variant/SubType为-1,表示包括任意Variant/SubType的实体。Cache为true时会缓存结果,一帧执行多次时可以使用。
如果一个实体拥有EntityFlag.FLAG_NO_QUERY
实体标志,它不会出现在查询结果中。如果需要获取拥有该实体标志的实体,应该改为使用GetRoomEntities
函数。
Find·In·Radius ()⚓︎
table FindInRadius ( Vector Position, float Radius, int Partitions = 0xFFFFFFFF )⚓︎
返回中心为Position,半径为Radius范围内的所有由Partitions筛选的实体(另见EntityPartition enum)(包括所有 = 0xffffffff)
该函数不根据实体距离中心的距离,而是根据他们加载的顺序排序。
Get·Built·In·Callback·State ()⚓︎
boolean GetBuiltInCallbackState ( function callbackId )⚓︎
获取内置回调状态。
如果ID为callbackId
的回调会被游戏执行,返回true
。如果不存在ID为callbackId
的回调,会返回false
。
Get·Callbacks ()⚓︎
table GetCallbacks ( function callbackId, boolean createIfMissing )⚓︎
获取所有ID为callbackId
的MOD回调。这些回调会表示为一个表,更多信息请查阅自定义回调教程。
游戏会将所有ID为callbackId
的回调加进一个表里,callbackId
是其索引,而值则是一个包含所有ID为callbackId
的回调的表。
如果createIfMissing
为true
,并且不存在ID为callbackId
的回调,游戏会自动创建一个包含ID为callbackId
的回调的空表,用于增加新的回调。这个空表包含一个具有默认元函数__matchParams
的元表,而这个元函数会在添加回调,并且检查指定的额外参数是否匹配时被调用。每当一个回调被添加时,这个元函数也会被使用,其参数createIfMissing
为true
。
如果createIfMissing
为false
或者nil
,并且不存在ID为callbackId
的回调,该函数返回一个空表。
Get·Card·Id·By·Name ()⚓︎
int GetCardIdByName ( string cardHudName )⚓︎
基于“pocketitems.xml”文件中定义的“hud”属性返回卡牌ID 。如果找不到具有该“hud”属性值的卡,则返回-1
。
警告
该函数的名称具有误导性,该函数只能使用卡片的“hud”属性值,而不能使用卡牌的名称。
漏洞
此函数不适用于原版卡片/符文,因为它们在pocketitems.xml文件中的条目中没有定义“hud”属性。您需要使用Card枚举来获取原版的ID。
示例代码
以下代码获取一张MOD卡牌的卡牌ID。
1 2 3 |
|
1 |
|
Get·Challenge ()⚓︎
int GetChallenge ( )⚓︎
返回玩家当前正在进行的挑战的ID。如果玩家没有进行任何挑战,则返回0。
Get·Challenge·Id·By·Name ()⚓︎
int GetChallengeIdByName ( string challengeName )⚓︎
根据挑战的名称返回挑战的ID。(文件:challenges.xml)如果找不到具有该名称的挑战,则返回-1
(区分大小写)。
示例代码
以下代码获取挑战“愚人节”的挑战ID。
1 2 |
|
Get·Costume·Id·By·Path ()⚓︎
int GetCostumeIdByPath ( string path )⚓︎
根据外观的文件路径返回外观的ID。(文件:costumes2.xml)如果找不到具有该路径的外观,则返回-1
。
示例代码
以下代码获取套装“拉了!”的外观ID。
1 2 |
|
Get·Curse·Id·By·Name ()⚓︎
int GetCurseIdByName ( string curseName )⚓︎
根据诅咒的名称返回诅咒的ID。(文件:curses.xml)如果找不到具有该名称的诅咒,则返回-1
。
示例代码
以下代码获取未知诅咒的诅咒ID。
1 2 |
|
Get·Entity·Type·By·Name ()⚓︎
int GetEntityTypeByName ( string entityName )⚓︎
根据实体的名称返回实体的EntityType。(文件:entities2.xml)如果找不到具有该名称的实体,则返回0
。
注意
没有该函数的SubType版本。
示例代码
以下代码获取燃烧裂口尸的EntityType。
1 2 |
|
Get·Entity·Variant·By·Name ()⚓︎
int GetEntityVariantByName ( string entityName )⚓︎
根据实体的名称返回实体的Variant。(文件:entities2.xml)如果找不到具有该名称的实体,则返回-1
。
注意
没有该函数的SubType版本。
示例代码
以下代码获取燃烧裂口尸的Variant。
1 2 |
|
Get·Frame·Count ()⚓︎
int GetFrameCount ( )⚓︎
返回整个游戏正在运行的帧数。即使游戏暂停或在主菜单中,计数器也会增加!
1秒大致等于60帧。
因此,此函数的工作方式与Game():GetFrameCount()
截然不同。
Get·Free·Near·Position ()⚓︎
Vector GetFreeNearPosition ( Vector pos, float step )⚓︎
返回距离位置pos最近的空区域。
Get·Item·Config ()⚓︎
ItemConfig GetItemConfig ( )⚓︎
获取ItemConfig对象。
这是唯一可以访问ItemConfig
对象的方法。
Get·Item·Id·By·Name ()⚓︎
int GetItemIdByName ( string itemName )⚓︎
根据道具名称返回道具的ID。(文件:items.xml)如果找不到具有该名称的道具,则返回-1
。
示例代码
以下代码获取一个MOD道具的ID。
1 |
|
1 |
|
Get·Music·Id·By·Name ()⚓︎
int GetMusicIdByName ( string musicName )⚓︎
返回一个音乐的ID。(文件:music.xml)如果找不到具有该名称的音乐,则返回-1
。
示例代码
以下代码获取标题界面的音乐ID。
1 2 |
|
Get·Pill·Effect·By·Name ()⚓︎
int GetPillEffectByName ( string pillEffect )⚓︎
根据胶囊效果的名称返回胶囊效果ID。(文件:pocketitems.xml)如果找不到具有该名称的胶囊效果,则返回-1
。
示例代码
以下代码获取“我能永远看清!”的胶囊效果ID。
1 2 |
|
Get·Player ()⚓︎
EntityPlayer GetPlayer ( int playerID = 0 )⚓︎
返回与提供的玩家ID匹配的EntityPlayer。玩家ID从0开始并向上递增。例如,当扮演雅各布和以扫时,雅各布的玩家ID将为0,以扫的玩家ID为1。
如果传递了无效的玩家ID(例如-20或20),则函数将假定玩家索引为0。
如果在任何玩家初始化之前调用此函数(即在主菜单中调用它),则此函数会返回nil
。
此函数与Game():GetPlayer()
相同。
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Get·Player·Type·By·Name ()⚓︎
PlayerType GetPlayerTypeByName ( string playerName , boolean Tainted = false )⚓︎
根据角色的名称返回角色类型(ID)。(文件:players.xml)如果找不到具有该名称的角色,则返回-1
。
警告
在《忏悔》中,角色名字被设置为可翻译文本,并且会使用翻译占位符作为他们的“基本名称”。例如,要获取该隐的角色类型,你需要使用名称#CAIN_NAME
而非Cain
。
建议对MOD角色使用该函数,而对原版角色直接使用PlayerType枚举。
示例代码
以下代码获取阿撒泻勒的角色类型。
1 2 3 4 5 |
|
Get·Random·Position ()⚓︎
Vector GetRandomPosition ( )⚓︎
返回当前房间内的随机位置。
返回值是一个向量,表示世界坐标中的位置。
Get·Room·Entities ()⚓︎
Entity[] GetRoomEntities ( )⚓︎
返回一个可遍历的表,该表包含调用函数时房间中的所有实体。
此行为不同于Room::GetEntities()
,后者返回一个原始指针,指向在任何给定时间存储房间所有实体的数组。
对于大多数用例,建议使用Isaac.GetRoomEntities()
!
示例代码
以下代码打印房间中每个实体的Type、Variant和SubType。
1 2 3 |
|
Get·Screen·Height ()⚓︎
float GetScreenHeight ( )⚓︎
获取游戏屏幕的高度(以像素为单位)。
Get·Screen·Point·Scale ()⚓︎
float GetScreenPointScale ( )⚓︎
返回一个表示屏幕“缩放”程度的数字。
根据游戏窗口的分辨率,可以是1.0
或2.0
等。
视频演示
Get·Screen·Width ()⚓︎
float GetScreenWidth ( )⚓︎
获取游戏屏幕的宽度(以像素为单位)。
Get·Sound·Id·By·Name ()⚓︎
int GetSoundIdByName ( string soundName )⚓︎
根据音效的名称返回音效的ID。(文件:sounds.xml)如果找不到具有该名称的音效,则返回-1
。
示例代码
以下代码获取名为"Custom Sound Effect"的音效ID。
1 |
|
Get·Text·Width ()⚓︎
int GetTextWidth ( string str )⚓︎
基于“terminus8”字体(与Isaac.RenderText()中使用的字体相同),返回给定字符串的宽度(以像素为单位)。
Get·Time ()⚓︎
int GetTime ( )⚓︎
返回自计算机操作系统启动以来的当前时间(以毫秒为单位)。
这与经过了多少帧无关,对于测量经过了多少实时时间非常有用。(帧并不是一个很好的时间指标,因为游戏会在每层过渡动画和房间过渡动画时加载新数据,然后锁定。)
例如,您可以使用它来实现基于实时的屏幕速度运行计时器,或者将一个函数的性能影响与另一个函数进行比较。
Get·Trinket·Id·By·Name ()⚓︎
int GetTrinketIdByName ( string trinketName )⚓︎
根据饰品的名称返回其饰品ID。(文件:items.xml)如果找不到具有该名称的饰品,则返回-1
。
示例代码
以下代码获取一个MOD饰品的ID。
1 |
|
1 |
|
Grid·Spawn ()⚓︎
GridEntity GridSpawn ( GridEntityType gridEntityType, int variant, Vector position, boolean forced )⚓︎
在给定位置(世界坐标)生成一个网格实体。
Bugs
“forced”参数可以用于在某些特定情况下覆盖给定位置的网格实体。例如:不能覆盖一块岩石,但可以覆盖已经被炸毁的岩石。你可以通过Isaac.GetFreeNearPosition
查询一个位置是否被认为是空地。通过检查返回的网格实体的类型,可以确保正确进行了替换。否则,你可能需要删除给定位置的网格实体,然后在其位置生成其他内容。
例如,要在房间中央生成一块超级标记石头:
1 2 3 4 |
|
Has·Mod·Data ()⚓︎
boolean HasModData ( table modRef )⚓︎
如果您的mod使用“SaveModData()”函数存储了数据——换句话说,如果你的mod的数据文件夹中有一个“saveX.dat”文件,则返回true
。
有3个“saveX.dat”文件,每个存档一个。数字表示它对应的存档,由游戏自动确定。
对于AB+,它们存储在“main.lua”文件旁边的mod文件夹中。
对于忏悔,它们存储在游戏文件中“mods”文件夹旁边的“data”文件夹中。
建议使用Mod Reference的HasData函数而非该函数。
Load·Mod·Data ()⚓︎
string LoadModData ( table modRef )⚓︎
返回使用“SaveModData()”函数存储在“saveX.dat”文件中的字符串。如果您的mod的数据中没有“saveX.dat”文件,此函数将返回一个空字符串。
有3个“saveX.dat”文件,每个存档一个。数字表示它对应的存档,由游戏自动确定。
如果在主菜单中调用此函数,默认情况下,它将返回存档1的保存数据。
对于AB+,它们存储在“main.lua”文件旁边的mod文件夹中。
对于忏悔,它们存储在游戏文件中“mods”文件夹旁边的“data”文件夹中。
建议使用Mod Reference的LoadData函数而非该函数。
Register·Mod ()⚓︎
void RegisterMod ( table modRef, string modName, int apiVersion )⚓︎
在游戏中注册一个表以使用Mod Reference。
建议改用全局的RegisterMod函数。
Remove·Callback ()⚓︎
void RemoveCallback ( table modRef, ModCallback|string callbackId, table callbackFn )⚓︎
移除一个MOD回调。
推荐使用Mod Reference的RemoveCallback函数而非该函数。
Remove·Mod·Data ()⚓︎
void RemoveModData ( table modRef )⚓︎
如果存在储存的“saveX.dat”文件,将其删除。
有3个“saveX.dat”文件,每个存档一个。数字表示它对应的存档,由游戏自动确定。
建议使用Mod Reference的RemoveData函数而非该函数。
Render·Scaled·Text ()⚓︎
void RenderScaledText ( string str, float X, float Y, float ScaleX, float ScaleY, float R, float G, float B, float A )⚓︎
在屏幕上渲染缩放后的文本。X和Y坐标需要在屏幕坐标(X[0,~500) Y[0,~350) )中。ScaleX、ScaleY、R、G、B和A需要在[0,1]之间。
某些比例值可能会导致字体显示变形和像素化。
示例代码
以下代码在屏幕上显示玩家的位置。
1 2 3 |
|
Render·Text ()⚓︎
void RenderText ( string str, float X, float Y, float R, float G, float B, float A )⚓︎
在屏幕上渲染默认大小的文本。X和Y坐标需要在屏幕坐标(X[0,~500) Y[0,~350) )中。ScaleX、ScaleY、R、G、B和A需要在[0,1]之间。
示例代码
以下代码在屏幕上显示玩家的位置。
1 2 3 |
|
Run·Callback ()⚓︎
void RunCallback ( ModCallback|string callbackId, ...)⚓︎
执行所有ID为callbackId
的MOD回调,会在第一个返回值出现时中断,并使该函数返回该值。
Run·Callback·With·Param ()⚓︎
void RunCallbackWithParam ( ModCallback|string callbackId, object param, ...)⚓︎
Runs all callbacks added under callbackId
, breaking on the first return and returning that value.
执行所有可选参数为param
的callbackId
的MOD回调,会在第一个返回值出现时中断,并使该函数返回该值。
Save·Mod·Data ()⚓︎
void SaveModData ( table modRef, string data )⚓︎
向“saveX.dat”存储一串字符串。存储的数据在重开一局和游戏重启之后也会存在,因此非常适合存储持久数据。
有3个“saveX.dat”文件,每个存档一个。数字表示它对应的存档,由游戏自动确定。
对于AB+,它们存储在“main.lua”文件旁边的mod文件夹中。
对于忏悔,它们存储在游戏文件中“mods”文件夹旁边的“data”文件夹中。
建议使用Mod Reference的SaveData函数而非该函数。
Screen·To·World ()⚓︎
Vector ScreenToWorld ( Vector pos )⚓︎
将屏幕坐标(也称为窗口坐标)转换为世界坐标。这可以用于根据屏幕上的某一点获取房间中的特定位置。
世界坐标为x[0,inf) y[0,inf)。
Screen·To·World·Distance ()⚓︎
Vector ScreenToWorldDistance ( Vector pos )⚓︎
Set·Built·In·Callback·State ()⚓︎
void SetBuiltInCallbackState ( ModCallbacks callbackId, boolean state )⚓︎
Sets whether callbacks under callbackId
will be ran by the game. The game uses this to activate a ModCallbacks once a callback is added under one, or deactivate them when those callbacks have been removed.
设置内置回调状态。
作用未知。
Spawn ()⚓︎
Entity Spawn ( int entityType, int entityVariant, int entitySubtype, Vector position, Vector velocity, Entity Spawner )⚓︎
在给定位置生成一个实体。如果位置不是空的,会在最近的空位置生成。
存在两个生成实体的函数。一个是Isaac.Spawn()(该函数),用于以随机种子生成一个实体;另一个是Game():Spawn(),用于以特定种子生成一个实体。但由于一个BUG,Isaac.Spawn()有概率生成种子为0的实体,会导致游戏崩溃。如果需要生成一个拥有随机种子的实体,应该总是使用一个自定义的辅助函数,其使用Random()获取种子,在种子为0时将其改为1,并且使用Game():Spawn()来生成实体。(IsaacScript用户使用spawn
辅助函数就可以了,它自己就会使用Game.Spawn
。)
示例代码
以下代码在本房间的中央生成一个随机道具。
1 |
|
Bug
由于随机种子使用的是Random()函数,会导致生成的实体的InitSeed可能为0。如果这个实体要用到随机数生成器,游戏会崩溃。
World·To·Render·Position ()⚓︎
Vector WorldToRenderPosition ( Vector pos )⚓︎
将世界坐标(又名游戏坐标)转换为渲染坐标。这可以用于在房间中的固定位置渲染事物。渲染坐标系为x[0,inf) y[0,inf)。它定义当前房间中渲染平面上的位置。
示例代码
以下代码在鼠标光标的位置渲染“Test”,与游戏是否处于全屏无关。
1 2 3 |
|
World·To·Screen ()⚓︎
Vector WorldToScreen ( Vector pos )⚓︎
将世界坐标(又名游戏坐标)转换为屏幕(又名窗口)坐标。这可以用来渲染实体旁边的东西。屏幕坐标系为x[0,inf) y[0,inf)。通常情况下,它一直到~500x ~300y。
返回值向量包含整数值或以.5结尾的数字。
示例代码
以下代码在角色的位置渲染“Test”,会跟随角色移动。
1 2 3 |
|