大型实体跨区生成时方块重复的问题
- Dominant language
- JavaScript
- Stars
- 1
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
https://github.com/jayli/mc-lite/commit/3115aeca9ec7f9c06884846c195409e18242d39b
-----------------------------------------------------
有一个问题,json 生成的实体有两类,一类是普通实体,一类是大型实体,大型实体的面积通常会超过一个chunk的大小,大型实体定义在BigBuildingWhitelist.js中。代码里有一个功能,随着玩家靠近和远离大型实体时,大型实体的出现和消失是跟随chunk的出现和消失一起,而不是大型实体(比如castle)一次性出现和消失。因为如果是一次性出现和消失,将会出现大型实体结构在离玩家很近的时候出现和消失,因为有可能大型实体归属的chunk是较远的距离,远方的chunk出现时,携带的大型实体伸展到离玩家很近的距离突然显现,体验不好。所以我修改为了大型实体随着chunk的出现而出现,随chunk的消失而消失。我在这次修改中3115aeca9ec7f9c06884846c195409e18242d39b 新增了大型实体的逻辑。
与之带来的问题是,为了确保大型实体的显现和消失跟随chunk,代码的实现应该是将大型实体跨chunk的部分做了重复生成,比如castle伸展到了相邻的chunk里,相邻的 chunk 重新生成了跨区过来的castle的方块,并跟原castle的跨区方块重叠。这样就可以做到castle所属的chunk消失伴随着原始 castle的所有方块都消失的时候,相邻chunk还有一份跨区方块的拷贝,这样在视觉上就可以模拟大型实体跟随chunk的显示和消失。这样的问题很明显,就是大型实体跨区的方块会又被生成一次,并且跟跨区实体的方块重叠到一起,这样带来的问题就是,大型实体跨区的部分因为一个位置有多个方块生成,玩家点击多次消除才能将该位置的方块消除。同样因为方块重叠问题,导致 AO 计算会有闪现的问题。
这些问题的根源就是大型跨区实体为了要确保玩家远离或靠近时的逐步随chunk消失或显现而打的补丁。现在看来这个补丁打的并不完美,而且引入了较多新问题。
现在我希望能彻底解决这个问题。进一步优化这个补丁。既要满足实体方块跟随chunk的显现和消失,同时也要杜绝跨区同一位置的重叠方块的问题。
我想是否可以将这个机制统一掉,除了非标准实体(RealisticTree.js、GunMan、rover、turret.json,zombie_nest.json 等),其他所有实体能否全都一视同仁,不再区分大型小型,只要生成之后,执行一个补丁逻辑,不再设计实体和chunk的中心点关联,而是将实体都打散为普通的方块,方块位置归属到哪个chunk就算到哪个chunk,随后的显示和消失全都交给当前chunk来管理,因为除了非标实体外,所有的实体全部都是方块组成的,计算实体归属没有意义,计算方块归属会更简单高效,也能满足我的诉求,即能逐层在远离和靠近时逐步消失和显现,也能避免重叠的问题。
为了实现这一机制,是否可以这样考虑,生成环节和后续的类似consolidation环节解耦开,在后续有一个类似 consolidation的方法,比如“打散实体结构、重新修正方块归属”,并从世界中将实体删除,只保留方块数据,后续所有与玩家的互动都是方块,简单且一致,也能避免引入更多问题。
请你详细考虑这个方案是否可行,并执行详细的修改计划。
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reviewing commit 3115aeca9ec7f9c06884846c195409e18242d39b and BigBuildingWhitelist.js, then trace how large entities are generated and tied to chunk visibility. Compare the proposed block-ownership approach with the handling of RealisticTree.js, GunMan, rover, turret.json, and zombie_nest.json; done means chunk-based visibility without overlapping blocks, repeated removal, or AO flicker.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- game-dev
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100