-
Notifications
You must be signed in to change notification settings - Fork 0
02. 弹幕入门
既然称为弹幕核心,那么弹幕肯定是最重要的内容,本篇将会让你大概地了解一下弹幕。
一个弹幕主要由ShotData里面的各个变量决定行为逻辑,颜色,渲染等等
参考源码(也可以参考英文注释)
ShotData(弹幕数据),主要控制弹幕的表现,例如颜色,类别以及模型渲染等等
弹幕数据又包含了数个数据
- Form (弹幕类型)-> 决定弹幕物理外观
- renderProperties (渲染属性) -> 向弹幕渲染器传递的额外参数
- Color (弹幕颜色)
- edgeColor (边缘色)-> 决定 DanmakuState 的边缘色
- coreColor (核心色)-> 决定 DanmakuState 的核心色
- mainColor (主色)-> 最好猜测决定色彩方面的主色
- secondaryColor (次色) -> 最好猜测决定色彩方面的次色
- damage(伤害)
- size(弹幕大小)
- sizeX
- sizeY
- sizeZ
- delay(延时发射/运动)-> 等待delay的时间后开始运动,例如镭射这种固定弹幕,这个值通常大于下面的end
- end(持续时间)-> 弹幕将会在end后消失
- subEntity(弹幕子实体)-> 较为复杂,详细看下方说明
- subEntityProperties(弹幕子实体属性)
其他参数较不重要,自行参考源码
DanmakuCore中LibColor
提供了许多两种预设颜色(VANILLA ,SATURATED),但请注意, VANILLA
颜色是通过反射获取,随着Forge的更新,这些颜色不可用,因为这个原因LibShotData
提供的大多数弹幕预设会出现颜色问题,具体表现为开发环境正常,生产环境颜色变为纯白。
因此,为了解决这个问题,我在io.github.teamgensouspark.kekkai.color
包下提供了一套颜色创建工具以及预设,请通过重新setMainColor()
来修复你的颜色
LibShotData.SHOT_HEART_CARD.setMainColor(...)
SubEntity(子实体),主要是控制弹幕的行为逻辑,例如是否碰撞,实体更新都是由子实体控制。
如何自定义一个子实体,在弹幕章节会讲
弹幕核心既然名字有弹幕,那么学会发射一个弹幕是必不可少的。
DanmakuTemplate.Builder danmaku = DanmakuTemplate.builder()
.setUser(player)
.setWorld(worldIn)
.setShot(LibShotData.SHOT_LASER.setMainColor(LibColor.COLOR_SATURATED_YELLOW));
DanmakuCore.spawnDanmaku(Collections.singletonList(danmaku.build().asEntity()));
上面这段代码是DanmakuCore的实现,是不是很简单(雾
你可能会觉得setUser
,setWorld
...很麻烦,别担心,你可以使用io.github.teamgensouspark.kekkai.danmaku
下的DanmakuBuilder.getBuilderWithEntity(...)
这样你就只需要以下代码就可以实现了,也许变得简单了也不一定(?)
DanmakuTemplate.Builder danmaku = DanmakuBuilder.getBuilderWithEntity(player).setShot(LibShotData.SHOT_LASER.setMainColor(LibColor.COLOR_SATURATED_YELLOW));
DanmakuCore.spawnDanmaku(Collections.singletonList(danmaku.build().asEntity()));
发射一个弹幕很简单,可如果发射环状的呢,你大可以自己处理,但 DanmakuCore 给了你一套解决方案,注意别引入错了,正确的包名是net.katsstuff.teamnightclipse.danmakucore.scalastuff.DanmakuCreationHelper
,另外一个javastuff
包内的DCH多了一个unused
的Quat参数。
但请注意,由于编译问题导致了许多变量名的丢失,你需要参考 DanmakuCore 中的 DanmakuHelper 来得到原有的变量名称。
要不是DanmakuCore没法编译也不会有KDCH这种东西......KDCH就是DCH的Kekkai版本,唯一的不同就是没有混淆名。
每种方法都有两种Overload
,不同在于最后的spawnDanmaku
,不填默认为true。
KekkaiDanmakuCreationHelper.createWideShot(...);
KekkaiDanmakuCreationHelper.createCircleShot(...);
...