<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://mdtwiki.top/index.php?action=history&amp;feed=atom&amp;title=JSON%E6%A8%A1%E7%BB%84%E6%95%99%E7%A8%8B-%E7%82%AE%E5%A1%94%E4%B8%8EDrawPart</id>
	<title>JSON模组教程-炮塔与DrawPart - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://mdtwiki.top/index.php?action=history&amp;feed=atom&amp;title=JSON%E6%A8%A1%E7%BB%84%E6%95%99%E7%A8%8B-%E7%82%AE%E5%A1%94%E4%B8%8EDrawPart"/>
	<link rel="alternate" type="text/html" href="https://mdtwiki.top/index.php?title=JSON%E6%A8%A1%E7%BB%84%E6%95%99%E7%A8%8B-%E7%82%AE%E5%A1%94%E4%B8%8EDrawPart&amp;action=history"/>
	<updated>2026-04-06T02:18:19Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://mdtwiki.top/index.php?title=JSON%E6%A8%A1%E7%BB%84%E6%95%99%E7%A8%8B-%E7%82%AE%E5%A1%94%E4%B8%8EDrawPart&amp;diff=2584&amp;oldid=prev</id>
		<title>硫缺铅：​创建页面，内容为“&lt;span id=&quot;炮塔与-drawpart&quot;&gt;&lt;/span&gt; = 炮塔与 DrawPart =  炮塔是 Mindustry 战斗系统的核心。无论是吃物品弹药的炮塔，还是用液体或电力驱动的炮塔，本质上都遵循同一套流程：搜敌、对准、装填、开火。你在 JSON 里配置的字段，最终会影响这条流程的每个环节。原版里“冰雹”“蓝瑟”“齐射”“海啸”“熔毁”等属于不同类型的炮塔，但它们的底层字段组…”</title>
		<link rel="alternate" type="text/html" href="https://mdtwiki.top/index.php?title=JSON%E6%A8%A1%E7%BB%84%E6%95%99%E7%A8%8B-%E7%82%AE%E5%A1%94%E4%B8%8EDrawPart&amp;diff=2584&amp;oldid=prev"/>
		<updated>2026-02-01T13:33:43Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;span id=&amp;quot;炮塔与-drawpart&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; = 炮塔与 DrawPart =  炮塔是 Mindustry 战斗系统的核心。无论是吃物品弹药的炮塔，还是用液体或电力驱动的炮塔，本质上都遵循同一套流程：搜敌、对准、装填、开火。你在 JSON 里配置的字段，最终会影响这条流程的每个环节。原版里“冰雹”“蓝瑟”“齐射”“海啸”“熔毁”等属于不同类型的炮塔，但它们的底层字段组…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span id=&amp;quot;炮塔与-drawpart&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= 炮塔与 DrawPart =&lt;br /&gt;
&lt;br /&gt;
炮塔是 Mindustry 战斗系统的核心。无论是吃物品弹药的炮塔，还是用液体或电力驱动的炮塔，本质上都遵循同一套流程：搜敌、对准、装填、开火。你在 JSON 里配置的字段，最终会影响这条流程的每个环节。原版里“冰雹”“蓝瑟”“齐射”“海啸”“熔毁”等属于不同类型的炮塔，但它们的底层字段组织方式高度一致。&lt;br /&gt;
&lt;br /&gt;
== 炮塔的基础流程 ==&lt;br /&gt;
&lt;br /&gt;
炮塔会在 &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; 指定的范围内寻找目标，是否能锁定空中、地面或建筑由 &amp;lt;code&amp;gt;targetAir&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;targetGround&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;targetBlocks&amp;lt;/code&amp;gt; 决定。&amp;lt;code&amp;gt;trackingRange&amp;lt;/code&amp;gt; 可以让炮塔更早锁定目标但不立即开火，适合做“预热型”武器。装填节奏由 &amp;lt;code&amp;gt;reload&amp;lt;/code&amp;gt; 决定（单位是刻），数值越小，射速越高。&amp;lt;code&amp;gt;shootCone&amp;lt;/code&amp;gt; 是“允许开火的角度偏差”，偏差越大越容易开火但命中率可能更差。&amp;lt;code&amp;gt;inaccuracy&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;velocityRnd&amp;lt;/code&amp;gt; 则用于制造散射，前者是角度误差，后者是速度波动。&lt;br /&gt;
&lt;br /&gt;
对远程或曲射炮塔来说，&amp;lt;code&amp;gt;minRange&amp;lt;/code&amp;gt; 很关键。它规定了“最小射程”，用于迫击炮或超远程炮塔，避免近距离自伤或误击，同时还能让 AI 产生更合理的站位。配合 &amp;lt;code&amp;gt;drawMinRange&amp;lt;/code&amp;gt;，你可以在建造预览中显示内圈范围，减少玩家的“误布置”。子弹里也有 &amp;lt;code&amp;gt;minRangeChange&amp;lt;/code&amp;gt;，它会在 UI 上修正最小射程，适合做“不同弹药不同安全距离”的设计。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;predictTarget&amp;lt;/code&amp;gt; 默认开启，炮塔会根据目标速度提前量射击。如果你给炮塔加了 &amp;lt;code&amp;gt;shoot.firstShotDelay&amp;lt;/code&amp;gt; 或充能延迟，建议配合 &amp;lt;code&amp;gt;accurateDelay&amp;lt;/code&amp;gt;，否则炮塔可能会用“当前的位置”去预测“未来的目标”，导致明显的落空。还有一组和充能相关的开关：&amp;lt;code&amp;gt;moveWhileCharging&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;reloadWhileCharging&amp;lt;/code&amp;gt; 控制炮塔在充能时是否允许移动或继续装填，这些细节会直接影响“有蓄力的武器”在实战中的节奏。&lt;br /&gt;
&lt;br /&gt;
射击点位也会影响表现。&amp;lt;code&amp;gt;shootX&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;shootY&amp;lt;/code&amp;gt; 决定子弹从炮塔贴图的哪个位置出射，&amp;lt;code&amp;gt;xRand&amp;lt;/code&amp;gt; 会给射击点带来水平随机偏移，配合 &amp;lt;code&amp;gt;inaccuracy&amp;lt;/code&amp;gt; 能做出“散射武器”。声音方面，&amp;lt;code&amp;gt;shootSoundVolume&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;soundPitchMin/Max&amp;lt;/code&amp;gt; 可以微调射击质感，让高射速武器听起来不至于刺耳。对于多管炮塔，合理设置 &amp;lt;code&amp;gt;ammoEjectBack&amp;lt;/code&amp;gt; 可以让弹壳喷出位置更合理，减少“弹壳从炮口飞出”的违和感。&lt;br /&gt;
&lt;br /&gt;
目标选择也有细节。&amp;lt;code&amp;gt;targetBlocks&amp;lt;/code&amp;gt; 控制是否攻击建筑，&amp;lt;code&amp;gt;targetUnderBlocks&amp;lt;/code&amp;gt; 用来避免把传送带、桥等“下层建筑”当作主要目标；&amp;lt;code&amp;gt;targetHealing&amp;lt;/code&amp;gt; 会把友方建筑视为修复目标，适合修复类炮塔。更复杂的筛选（如 &amp;lt;code&amp;gt;unitFilter&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;buildingFilter&amp;lt;/code&amp;gt;）是函数类型，JSON 无法直接写，只能在 JS/Java 里实现。&lt;br /&gt;
&lt;br /&gt;
热量与视觉反馈由 &amp;lt;code&amp;gt;recoil&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;recoilTime&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cooldownTime&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;shake&amp;lt;/code&amp;gt; 等字段决定，它们不会直接改变伤害，但会影响“射击手感”。声音相关字段包括 &amp;lt;code&amp;gt;shootSound&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;chargeSound&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;loopSound&amp;lt;/code&amp;gt;，其中 &amp;lt;code&amp;gt;chargeSound&amp;lt;/code&amp;gt; 常用于“有首次延迟的武器”，&amp;lt;code&amp;gt;loopSound&amp;lt;/code&amp;gt; 适合持续开火类炮塔。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;弹药体系物品液体与电力&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 弹药体系：物品、液体与电力 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ItemTurret&amp;lt;/code&amp;gt; 通过 &amp;lt;code&amp;gt;ammoTypes&amp;lt;/code&amp;gt; 把物品映射到子弹类型。键是物品内部名，值是子弹对象。每个子弹都带有 &amp;lt;code&amp;gt;ammoMultiplier&amp;lt;/code&amp;gt;，它决定“消耗一个物品能转化成多少弹药单位”。&amp;lt;code&amp;gt;maxAmmo&amp;lt;/code&amp;gt; 是弹药容量上限，&amp;lt;code&amp;gt;ammoPerShot&amp;lt;/code&amp;gt; 是单次射击消耗，&amp;lt;code&amp;gt;consumeAmmoOnce&amp;lt;/code&amp;gt; 则控制“一次射击是否只消耗一次弹药”（常用于散射型武器）。这些字段组合起来，能精确控制弹药经济。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LiquidTurret&amp;lt;/code&amp;gt; 的逻辑与 &amp;lt;code&amp;gt;ItemTurret&amp;lt;/code&amp;gt; 相似，只是弹药来源变成液体。容量字段是 &amp;lt;code&amp;gt;liquidCapacity&amp;lt;/code&amp;gt;，它决定液体缓冲上限。液体弹药的消耗以“当前液体”计算，并按子弹的 &amp;lt;code&amp;gt;ammoMultiplier&amp;lt;/code&amp;gt; 换算：如果 &amp;lt;code&amp;gt;ammoMultiplier = 2&amp;lt;/code&amp;gt;，每次射击只消耗 &amp;lt;code&amp;gt;1/2&amp;lt;/code&amp;gt; 单位液体。&amp;lt;code&amp;gt;extinguish&amp;lt;/code&amp;gt; 决定是否优先灭火，这也是液体炮塔经常“打火不打人”的原因。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PowerTurret&amp;lt;/code&amp;gt; 不需要弹药，直接通过 &amp;lt;code&amp;gt;shootType&amp;lt;/code&amp;gt; 指定固定子弹。耗电写在 &amp;lt;code&amp;gt;consumes.power&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;consumes.powerBuffered&amp;lt;/code&amp;gt; 中，前者表示持续耗电，后者表示从电力缓冲中抽取。若你想让炮塔有明显“充能感”，可以用 &amp;lt;code&amp;gt;shoot.firstShotDelay&amp;lt;/code&amp;gt; 配合 &amp;lt;code&amp;gt;chargeSound&amp;lt;/code&amp;gt; 与子弹的 &amp;lt;code&amp;gt;chargeEffect&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
弹药相关的视觉反馈也可以调。&amp;lt;code&amp;gt;ammoUseEffect&amp;lt;/code&amp;gt; 控制“消耗弹药时”的特效，&amp;lt;code&amp;gt;ammoEjectBack&amp;lt;/code&amp;gt; 会影响弹壳喷出的位置；如果你做的是“重炮”或“炮塔机枪”，这类细节能让手感更有区分度。&amp;lt;code&amp;gt;displayAmmoMultiplier&amp;lt;/code&amp;gt; 决定数据库面板是否显示弹药倍率，对新手向模组来说很重要，能避免玩家误解“同一炮塔为什么弹药效率差这么多”。&lt;br /&gt;
&lt;br /&gt;
下面是一个最小的物品炮塔示例：&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;文件：content/blocks/tutorial-turret.json&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ItemTurret&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;示例炮塔&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;使用铜和石墨作为弹药。&amp;quot;,&lt;br /&gt;
    &amp;quot;size&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;range&amp;quot;: 120,&lt;br /&gt;
    &amp;quot;reload&amp;quot;: 30,&lt;br /&gt;
    &amp;quot;rotateSpeed&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;requirements&amp;quot;: [&lt;br /&gt;
        &amp;quot;copper/90&amp;quot;,&lt;br /&gt;
        &amp;quot;lead/60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;ammoTypes&amp;quot;: {&lt;br /&gt;
        &amp;quot;copper&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;BasicBulletType&amp;quot;,&lt;br /&gt;
            &amp;quot;speed&amp;quot;: 2.5,&lt;br /&gt;
            &amp;quot;damage&amp;quot;: 10,&lt;br /&gt;
            &amp;quot;lifetime&amp;quot;: 60&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;graphite&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;BasicBulletType&amp;quot;,&lt;br /&gt;
            &amp;quot;speed&amp;quot;: 3.2,&lt;br /&gt;
            &amp;quot;damage&amp;quot;: 20,&lt;br /&gt;
            &amp;quot;lifetime&amp;quot;: 55,&lt;br /&gt;
            &amp;quot;ammoMultiplier&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
这个例子里，“铜”使用默认 &amp;lt;code&amp;gt;ammoMultiplier&amp;lt;/code&amp;gt;，而“石墨”设置为 4，意味着同样的物品数量能提供更多弹药单位。&amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; 与子弹的 &amp;lt;code&amp;gt;speed * lifetime&amp;lt;/code&amp;gt; 共同决定最终射程，如果子弹寿命太短，即使 &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; 很大也打不到那么远。&lt;br /&gt;
&lt;br /&gt;
== 子弹类型的关键字段 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;BulletType&amp;lt;/code&amp;gt; 决定了“这一发子弹如何表现”。&amp;lt;code&amp;gt;speed&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;lifetime&amp;lt;/code&amp;gt; 决定飞行距离，&amp;lt;code&amp;gt;damage&amp;lt;/code&amp;gt; 是基础伤害，&amp;lt;code&amp;gt;splashDamage&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;splashDamageRadius&amp;lt;/code&amp;gt; 用于范围伤害。&amp;lt;code&amp;gt;pierce&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;pierceCap&amp;lt;/code&amp;gt; 控制穿透，&amp;lt;code&amp;gt;knockback&amp;lt;/code&amp;gt; 影响击退。&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;statusDuration&amp;lt;/code&amp;gt; 用于附加状态效果（如“燃烧”“电击”），需要与你在状态章节里定义的状态名对应。&lt;br /&gt;
&lt;br /&gt;
如果需要导弹、激光或持续伤害，可以把 &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; 改成 &amp;lt;code&amp;gt;MissileBulletType&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;LaserBulletType&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ContinuousLaserBulletType&amp;lt;/code&amp;gt; 等子类。导弹常用 &amp;lt;code&amp;gt;homingPower&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;weaveMag&amp;lt;/code&amp;gt;，激光则常用 &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;width&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;colors&amp;lt;/code&amp;gt;，持续激光还会使用 &amp;lt;code&amp;gt;chargeEffect&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;smokeEffect&amp;lt;/code&amp;gt; 来塑造表现。配置时建议先从原版炮塔中抄一个相近的子弹，再逐步调整参数。&lt;br /&gt;
&lt;br /&gt;
子弹还有一些“影响炮塔数值”的字段，例如 &amp;lt;code&amp;gt;rangeChange&amp;lt;/code&amp;gt; 会在统计面板中改变炮塔的显示射程，&amp;lt;code&amp;gt;ammoMultiplier&amp;lt;/code&amp;gt; 会改变弹药效率。这些字段不仅影响战斗表现，也会影响玩家对炮塔的理解，所以需要和炮塔的定位保持一致。&lt;br /&gt;
&lt;br /&gt;
== 开火节奏与射击模式 ==&lt;br /&gt;
&lt;br /&gt;
除了基础的 &amp;lt;code&amp;gt;reload&amp;lt;/code&amp;gt;，炮塔的开火节奏还受 &amp;lt;code&amp;gt;shoot&amp;lt;/code&amp;gt; 子对象影响。&amp;lt;code&amp;gt;shoot&amp;lt;/code&amp;gt; 本质上是 &amp;lt;code&amp;gt;ShootPattern&amp;lt;/code&amp;gt;，它决定“一次射击”到底发射几发、间隔多久、散布多宽。最常用的字段是 &amp;lt;code&amp;gt;shots&amp;lt;/code&amp;gt;（单次射击的发数）、&amp;lt;code&amp;gt;shotDelay&amp;lt;/code&amp;gt;（连发之间的间隔）、&amp;lt;code&amp;gt;firstShotDelay&amp;lt;/code&amp;gt;（首发延迟）与 &amp;lt;code&amp;gt;spread&amp;lt;/code&amp;gt;（散射角度）。你可以用它来做“短促爆发”或“延迟蓄力”型炮塔，而不用修改子弹本身。&lt;br /&gt;
&lt;br /&gt;
另一组容易被忽略的节奏字段是 &amp;lt;code&amp;gt;shootWarmupSpeed&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;minWarmup&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;warmupMaintainTime&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;linearWarmup&amp;lt;/code&amp;gt;。它们控制“预热条”的上升速度、最低开火阈值与保持时间，适合做“越打越快”的持续火力或“必须蓄满才能开火”的高能武器。预热值不仅影响射击，还会驱动 DrawPart 的 &amp;lt;code&amp;gt;warmup&amp;lt;/code&amp;gt; 进度，因此如果你的炮塔有明显的充能动画，记得让预热参数与动画节奏一致。&lt;br /&gt;
&lt;br /&gt;
射程也不仅仅由 &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; 决定。炮塔会以 &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; 作为搜索与锁定的上限，但子弹能否飞到目标还取决于 &amp;lt;code&amp;gt;speed * lifetime&amp;lt;/code&amp;gt;。如果你遇到“显示射程很远但打不到”的情况，优先检查子弹寿命；如果“显示射程很短但实际打得很远”，可能是子弹的 &amp;lt;code&amp;gt;rangeChange&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;lifetime&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;speed&amp;lt;/code&amp;gt; 组合过高。&lt;br /&gt;
&lt;br /&gt;
在原版中，“冰雹”“齐射”属于典型的物品炮塔，“海啸”是液体炮塔，“蓝瑟”“熔毁”则是电力炮塔。你可以把这些作为参考：物品炮塔更强调弹药经济，液体炮塔更强调持续供给，电力炮塔则更依赖电网稳定性。&lt;br /&gt;
&lt;br /&gt;
== 弹药与物流的实际影响 ==&lt;br /&gt;
&lt;br /&gt;
很多玩家低估了弹药系统对生产链的影响。&amp;lt;code&amp;gt;maxAmmo&amp;lt;/code&amp;gt; 决定炮塔的“弹药缓冲”，它直接影响你需要多快补给；&amp;lt;code&amp;gt;ammoPerShot&amp;lt;/code&amp;gt; 决定单次射击的成本；&amp;lt;code&amp;gt;ammoMultiplier&amp;lt;/code&amp;gt; 则决定“单个物品到底能提供多少弹药单位”。这些字段加在一起，决定了“一个传送带是否能喂饱炮塔”。如果你希望炮塔更像“持续火力”，就应当提高 &amp;lt;code&amp;gt;ammoMultiplier&amp;lt;/code&amp;gt; 或降低 &amp;lt;code&amp;gt;ammoPerShot&amp;lt;/code&amp;gt;；如果你希望它成为“高爆发、低持续”，就可以反过来设置。&lt;br /&gt;
&lt;br /&gt;
液体炮塔在物流上更复杂，因为液体的管网容易堵塞，也更容易因为混液导致效率下降。设计液体炮塔时，建议明确输入液体类型，并通过 &amp;lt;code&amp;gt;ammoTypes&amp;lt;/code&amp;gt; 限制可用液体，这样玩家的管道布局会更清晰。电力炮塔的难点则是“能量峰值”：高 &amp;lt;code&amp;gt;reload&amp;lt;/code&amp;gt; 的炮塔更像“持续耗电”，低 &amp;lt;code&amp;gt;reload&amp;lt;/code&amp;gt; 且高伤害的炮塔则会产生“瞬时耗电峰值”，需要更多电池来平滑波动。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;模组示例饱和火力-3.3.0-的电力炮塔&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 模组示例：饱和火力 3.3.0 的电力炮塔 ==&lt;br /&gt;
&lt;br /&gt;
“饱和火力 3.3.0”里的“丁达尔”是一门典型的 &amp;lt;code&amp;gt;PowerTurret&amp;lt;/code&amp;gt;。它使用 &amp;lt;code&amp;gt;shoot&amp;lt;/code&amp;gt; 的 &amp;lt;code&amp;gt;ShootBarrel&amp;lt;/code&amp;gt; 模式来模拟多管齐射，&amp;lt;code&amp;gt;shootType&amp;lt;/code&amp;gt; 则直接定义子弹类型，并在子弹上配置了 &amp;lt;code&amp;gt;hitEffect&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;despawnEffect&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;trail&amp;lt;/code&amp;gt;。下面是该炮塔的部分字段节选，你可以看到 &amp;lt;code&amp;gt;shoot&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;shootType&amp;lt;/code&amp;gt; 的组合方式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;PowerTurret&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;丁达尔&amp;quot;,&lt;br /&gt;
    &amp;quot;reload&amp;quot;: 12,&lt;br /&gt;
    &amp;quot;shoot&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ShootBarrel&amp;quot;,&lt;br /&gt;
        &amp;quot;shots&amp;quot;: 12,&lt;br /&gt;
        &amp;quot;shotDelay&amp;quot;: 4,&lt;br /&gt;
        &amp;quot;barrels&amp;quot;: [&lt;br /&gt;
            5.5, 22.25, 0,&lt;br /&gt;
            -5.5, 22.25, 0,&lt;br /&gt;
            16, 21.25, 0,&lt;br /&gt;
            -16, 21.25, 0&lt;br /&gt;
        ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;shootType&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;BasicBulletType&amp;quot;,&lt;br /&gt;
        &amp;quot;damage&amp;quot;: 106,&lt;br /&gt;
        &amp;quot;speed&amp;quot;: 22,&lt;br /&gt;
        &amp;quot;lifetime&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;pierce&amp;quot;: true,&lt;br /&gt;
        &amp;quot;trailLength&amp;quot;: 50&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;consumes&amp;quot;: {&lt;br /&gt;
        &amp;quot;power&amp;quot;: 80,&lt;br /&gt;
        &amp;quot;coolant&amp;quot;: {&lt;br /&gt;
            &amp;quot;amount&amp;quot;: 2,&lt;br /&gt;
            &amp;quot;optional&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
这个例子体现了“电力炮塔 + 冷却液”的常见组合：电力是主输入，冷却液作为可选加速。对于高射速、多发数的炮塔来说，这种配置能在不强制液体管网的前提下提供上限提升。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;模组示例饱和火力-3.3.0-的物品炮塔&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 模组示例：饱和火力 3.3.0 的物品炮塔 ==&lt;br /&gt;
&lt;br /&gt;
“电极”是一门 &amp;lt;code&amp;gt;ItemTurret&amp;lt;/code&amp;gt;，它通过 &amp;lt;code&amp;gt;ammoTypes&amp;lt;/code&amp;gt; 定义不同弹药对应的 &amp;lt;code&amp;gt;EmpBulletType&amp;lt;/code&amp;gt;。你会发现它不仅设置了伤害与速度，还在子弹里塞入了 &amp;lt;code&amp;gt;chargeEffect&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;，这让“弹药类型”同时影响表现与附加状态。下面是其中一段节选：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ItemTurret&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;电极&amp;quot;,&lt;br /&gt;
    &amp;quot;ammoPerShot&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;shoot&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ShootPattern&amp;quot;,&lt;br /&gt;
        &amp;quot;firstShotDelay&amp;quot;: 20&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;ammoTypes&amp;quot;: {&lt;br /&gt;
        &amp;quot;copper&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;EmpBulletType&amp;quot;,&lt;br /&gt;
            &amp;quot;speed&amp;quot;: 14,&lt;br /&gt;
            &amp;quot;lifetime&amp;quot;: 18,&lt;br /&gt;
            &amp;quot;status&amp;quot;: &amp;quot;阳电&amp;quot;,&lt;br /&gt;
            &amp;quot;statusDuration&amp;quot;: 180,&lt;br /&gt;
            &amp;quot;chargeEffect&amp;quot;: {&lt;br /&gt;
                &amp;quot;type&amp;quot;: &amp;quot;MultiEffect&amp;quot;,&lt;br /&gt;
                &amp;quot;effects&amp;quot;: [&lt;br /&gt;
                    {&amp;quot;type&amp;quot;: &amp;quot;ParticleEffect&amp;quot;, &amp;quot;particles&amp;quot;: 13},&lt;br /&gt;
                    {&amp;quot;type&amp;quot;: &amp;quot;ParticleEffect&amp;quot;, &amp;quot;particles&amp;quot;: 1}&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
这个片段展示了“弹药类型改变武器效果”的思路。你可以把它理解为“同一门炮塔，弹药决定玩法”，这在设计多用途炮塔时非常有效。&lt;br /&gt;
&lt;br /&gt;
== 冷却与效率 ==&lt;br /&gt;
&lt;br /&gt;
很多炮塔都可以通过冷却液提升射速。JSON 中通常写 &amp;lt;code&amp;gt;consumes: { coolant: { liquid: &amp;amp;quot;water&amp;amp;quot;, amount: 0.1 } }&amp;lt;/code&amp;gt;，这会被解析成 &amp;lt;code&amp;gt;ConsumeCoolant&amp;lt;/code&amp;gt;。&amp;lt;code&amp;gt;coolantMultiplier&amp;lt;/code&amp;gt; 决定冷却的加速效率，数值越大，冷却效果越明显。需要注意的是，冷却并不是“无限叠加”，它只是加速装填或降低热量，因此在极高射速下仍会被 &amp;lt;code&amp;gt;reload&amp;lt;/code&amp;gt; 的下限限制。&lt;br /&gt;
&lt;br /&gt;
如果你把 &amp;lt;code&amp;gt;coolantMultiplier&amp;lt;/code&amp;gt; 设得非常高，又把 &amp;lt;code&amp;gt;cooldownTime&amp;lt;/code&amp;gt; 设得很短，炮塔可能会出现“热量几乎不显示”的情况，玩家对射击节奏的感知会变弱。适当保留一点热量衰减时间，反而能让武器更有存在感。&lt;br /&gt;
&lt;br /&gt;
部分炮塔还会使用热量机制（&amp;lt;code&amp;gt;heatRequirement&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;maxHeatEfficiency&amp;lt;/code&amp;gt;），这类炮塔通常需要与热源或热能方块配合。JSON 可以写这些字段，但实际热量来源大多来自特定方块或环境，所以没有配套系统时写了也不会起效。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;drawpart-与炮塔绘制&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== DrawPart 与炮塔绘制 ==&lt;br /&gt;
&lt;br /&gt;
炮塔的绘制由 &amp;lt;code&amp;gt;drawer&amp;lt;/code&amp;gt; 控制，默认是 &amp;lt;code&amp;gt;DrawTurret&amp;lt;/code&amp;gt;。如果你需要更复杂的动画或多层结构，可以在 &amp;lt;code&amp;gt;drawer&amp;lt;/code&amp;gt; 里使用 &amp;lt;code&amp;gt;parts&amp;lt;/code&amp;gt; 配置 &amp;lt;code&amp;gt;DrawPart&amp;lt;/code&amp;gt;。最常用的是 &amp;lt;code&amp;gt;RegionPart&amp;lt;/code&amp;gt;，它会在原炮塔基础上叠加一张贴图，并根据进度位移或旋转。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RegionPart&amp;lt;/code&amp;gt; 的关键字段包括 &amp;lt;code&amp;gt;suffix&amp;lt;/code&amp;gt;（贴图后缀）、&amp;lt;code&amp;gt;moveX&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;moveY&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;moveRot&amp;lt;/code&amp;gt;（位移与旋转）、&amp;lt;code&amp;gt;mirror&amp;lt;/code&amp;gt;（左右镜像）、&amp;lt;code&amp;gt;heatColor&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;heatProgress&amp;lt;/code&amp;gt;（热量颜色与进度）。&amp;lt;code&amp;gt;progress&amp;lt;/code&amp;gt; 决定动画驱动来源，例如 &amp;lt;code&amp;gt;warmup&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;recoil&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;reload&amp;lt;/code&amp;gt; 等。&amp;lt;code&amp;gt;PartProgress&amp;lt;/code&amp;gt; 还支持简单运算组合，例如用 &amp;lt;code&amp;gt;mul&amp;lt;/code&amp;gt; 让某个部件动作幅度更小，用 &amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt; 把两个进度叠加成“复合动画”。&lt;br /&gt;
&lt;br /&gt;
示例：给炮塔加一个会随预热移动的部件。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;parts&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;RegionPart&amp;quot;,&lt;br /&gt;
        &amp;quot;suffix&amp;quot;: &amp;quot;-barrel&amp;quot;,&lt;br /&gt;
        &amp;quot;moveY&amp;quot;: -1.5,&lt;br /&gt;
        &amp;quot;progress&amp;quot;: &amp;quot;warmup&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&amp;lt;/pre&amp;gt;&lt;br /&gt;
“饱和火力 3.3.0”的“扩散轨道炮”展示了更复杂的部件组合。它让一个部件跟随 &amp;lt;code&amp;gt;recoil&amp;lt;/code&amp;gt; 回弹，另一个用 &amp;lt;code&amp;gt;warmup&amp;lt;/code&amp;gt; 做“充能核心”，再用 &amp;lt;code&amp;gt;HaloPart&amp;lt;/code&amp;gt; 把 &amp;lt;code&amp;gt;reload&amp;lt;/code&amp;gt; 变成“几何光环”。你可以在自己的炮塔上复用这种“多进度驱动”的思路：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;drawer&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DrawTurret&amp;quot;,&lt;br /&gt;
    &amp;quot;parts&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;RegionPart&amp;quot;,&lt;br /&gt;
            &amp;quot;suffix&amp;quot;: &amp;quot;-中&amp;quot;,&lt;br /&gt;
            &amp;quot;progress&amp;quot;: &amp;quot;recoil&amp;quot;,&lt;br /&gt;
            &amp;quot;heatProgress&amp;quot;: &amp;quot;recoil&amp;quot;,&lt;br /&gt;
            &amp;quot;moveY&amp;quot;: -10,&lt;br /&gt;
            &amp;quot;under&amp;quot;: true&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;ShapePart&amp;quot;,&lt;br /&gt;
            &amp;quot;progress&amp;quot;: &amp;quot;warmup&amp;quot;,&lt;br /&gt;
            &amp;quot;y&amp;quot;: -24,&lt;br /&gt;
            &amp;quot;circle&amp;quot;: true,&lt;br /&gt;
            &amp;quot;radiusTo&amp;quot;: 6&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;HaloPart&amp;quot;,&lt;br /&gt;
            &amp;quot;progress&amp;quot;: &amp;quot;reload&amp;quot;,&lt;br /&gt;
            &amp;quot;y&amp;quot;: -24,&lt;br /&gt;
            &amp;quot;radius&amp;quot;: 10,&lt;br /&gt;
            &amp;quot;radiusTo&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;strokeTo&amp;quot;: 0.1&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
这类组合的关键不是“堆特效”，而是让不同的战斗节奏对应不同的视觉反馈：回弹、充能、装填，各自有各自的动画驱动，玩家才能一眼读懂炮塔状态。&lt;br /&gt;
&lt;br /&gt;
如果你发现部件位置不对，优先检查贴图命名是否正确，再调整 &amp;lt;code&amp;gt;moveX&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;moveY&amp;lt;/code&amp;gt; 的偏移。DrawPart 的组合能力很强，但也最容易“走形”，建议先复刻原版，再做个性化修改。&lt;br /&gt;
&lt;br /&gt;
== 小结 ==&lt;br /&gt;
&lt;br /&gt;
炮塔配置的核心在于“射程与节奏”“弹药与效率”“表现与手感”。当这些层面都匹配时，即使是最简单的 &amp;lt;code&amp;gt;BasicBulletType&amp;lt;/code&amp;gt; 也能做出很有个性的炮塔。&lt;/div&gt;</summary>
		<author><name>硫缺铅</name></author>
	</entry>
</feed>