用户:
LWKevin0wvf小号查看:551 回复:21 评论:67 创建时间:2024-08-09T11:22:57

更新日志
点赞0
评论
--- Alpha ---
[Alpha 0.0.1]
2024.8.5 加入dirt、grass_block、water方块;优化MCBlock实体生成机制;加入玩家配置;加入创造模式放置、挖掘方块功能;使放置、挖掘方块时射线无视水方块。
2024.8.6 加入acacia_button方块;加入方块放置时对放置位置原有方块replaceable属性的检测;加入虚空伤害;加入复活功能。
2024.8.7 加入bedrock方块;矫正玩家大小;加入方块状态属性;加入基岩测试;加入acacia_leaves方块信息和物品信息。
2024.8.8 美化控制台输出格式;重构Player文件;加入方块放置碰撞箱检测,但错误08解决方案中的预算操作不太准确(e.velocity.mul(new GameVector3(3, 3, 3))没有计算方块实体碰撞箱出现延迟,也没有计算在方块实体碰撞箱出现前的时间里玩家会受到的加速度(例如撞到方块、被实体推动等)或在检测velocity后进行的跳跃)。
2024.8.9 加入主手、副手;加入玩家按键监听;加入按键绑定;加入F键切换副手;加入日志Log标签筛选输出功能;加入acacia_log方块信息和物品信息;修正replaceable方块的玩家放置机制(水直接被射线穿透除外,点击replaceable方块放置方块位置为点击方块位置,不会加上raycast.normal计算)。
再加一条 可以用状态更新(方块只影响周围)的方法(即《我为人人》动态规划),减少不必要的更新(例如扫区块)
方块更新不用监听所有方块了,但是扫区块还是需要随机刻随机方块/实体更新()
2024.9.1 避免了方块更新对被替换方块造成的阻塞。
setTimeout(()=>{blocks.getBlock(this.position.x-1, this.position.y, this.position.z, true).updatePostPlacement();/*...*/},0);
2024.9.4 加入GameHandler和游戏主线程;初步加入随机刻。
话说给我链接可以吗()
不可以的话告诉我flat_cache是何方神圣
()()创作端链接dao3.fun/edit/40e860喵a23ef0c33c9a
2024.9.6 初步加入指令映射函数系统;加入gamemode 、gamemode 和gamerule 指令;加入randomTickSpeed规则;初步更换玩家对象从GamePlayer对象到MC#Player对象。(“#”作防屏蔽符号使用)
2024.9.8 初步加入指令解释器(用来解析是否存在某条指令和这条指令的某种语法格式,以及解析并替换指令中的“@a”“@e”“@p”“@s”和“~”等等指代符号为实际参数。);使部分有多种格式的指令映射到的函数模拟函数重载功能;初步加入实体渲染优化。
2024.9.11 初步加入封闭区域实体优化(核心思想即去除周围方块都处于封闭区域内的方块)。 2024.9.12 修复部分封闭区域实体优化bug。 2024.9.13 修复所有封闭区域实体优化bug。
错误日志
点赞0
评论
01-[2024/8/5]x轴移动时会被模型卡住。解决方案:使用OBB可以减轻这个问题。
02 - [2024/8/5]模型数量限制太低,甚至不够一个区块(16*384*16=98304)的方块。 解决方案:未知。
03 - [2024/8/6]创造模式同时放置和挖掘方块会产生类似方块移动的效果。 解决方案:未知。
04 - [2024/8/6]潜行时不能保证每次都能退后到可以看到方块边缘。 解决方案:未知。
05 - [2024/8/7]第一人称和第三人称视角都会透视实体,不过第一人称没那么严重(只能透视1层方块),调大cameraFovY之后更严重。 解决方案:未知。
06 - [2024/8/7]落地时速度过快可能卡进方块实体中。 解决方案:禁用OBB可以解决这个问题。
07 - [2024/8/7]放置方块延迟较高,跟不上玩家移动速度。 解决方案:未知。
08 - [2024/8/8]放置方块有延迟,导致可能玩家移动到碰撞箱与方块碰撞箱相交后才出现方块实体,出现卡进方块实体或被方块实体弹飞的问题。 解决方案:预算方块实体碰撞箱出现时玩家的碰撞箱位置与方块实体碰撞箱位置进行判断。
09 - [2024/8/9]放置固体方块(有碰撞)到replaceable=true的非固体方块(无碰撞)位置时,会出现collides已被设置为true,但实际没有碰撞。在方块上再放置一个方块、挖掉下面方块或过一会儿才会有碰撞。 解决方案:未知。可能是延迟原因。
02 - [2024/8/5]模型数量限制太低,甚至不够一个区块(16*384*16=98304)的方块。 解决方案:优化使实体数量尽量减少,不创建不必要的实体。
换成神刀自带的方块
方块材质不一样,而且有地图大小限制
水方块不能穿透
《没有看到的=不存在,yyds》(量子学: yyds)
or 求吉吉,让他造出无限实体
肯定不如这个

点赞0
评论
godot比较适合2D小游戏
难道就不能做3D吗,我都用的好好的
这个我哥用过,做3D的游戏,做出来了
这叫godot,是个游戏引擎,适合做2D,但3D也不是不能做,3D效果比unity差
我知道
我哥有在里面做过3D的游戏
3D喵战,只不过不能联机,只能在家里一起玩
不过没发在游戏的商业
这个引擎很简单,还开源,我学过这个
我没学过
我哥为了做游戏专门学了好几天的代码
很简单,难度不大,就跟python差不多
我试图用过,但是sb(失败两个字的首字母就是sb)了
你是不是只写了代码,没创建节点
再或者,你没有添加光照,还有一种可能,引擎设置错了,导致运行一片灰
我哥下载的我不懂怎么弄
我代码都不会
emm 能加我一个吗
点赞0
评论
不过我浅浅问一嘴 亿点优化是不是包括了射线检测 ()()()
05-[2024/8/7]第一人称和第三人称视角都会透视实体,不过第一人称没那么严重(只能透视1层方块),调大cameraFovY之后更严重。解决方案:射线检测,找到方块、实体立刻返回,切换至RELATIVE视角。(是啥可以到www.yuque.com/box3lab上面看)
RELATIVE视角怎么设置ignoreSelector?
<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width,initial-scale=1.0"> <title>MinecraftStyle3D</title> <style> body{margin:0;} canvas{display:block;} </style> </head> <body> <scriptsr喵ajax/libs/three.js/r128/three.min.js"></script> <script> //设置场景、相机和渲染器 constscene=newTHREE.Scene(); constcamera=newTHREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000); constrenderer=newTHREE.WebGLRenderer(); renderer.setSize(window.innerWidth,window.innerHeight); document.body.appendChild(renderer.domElement); //创建一个立方体 constgeometry=newTHREE.BoxGeometry(); constmaterial=newTHREE.MeshBasicMaterial({color:0x00ff00}); constcube=newTHREE.Mesh(geometry,material); scene.add(cube); //移动相机 camera.position.z=5; //动画循环 functionanimate(){ requestAnimationFrame(animate); cube.rotation.x+=0.01; cube.rotation.y+=0.01; renderer.render(scene,camera); } animate(); //处理窗口大小调整 window.addEventListener('resize',()=>{ camera.aspect=window.innerWidth/window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth,window.innerHeight); }); </script> </body> </html>
点赞0
评论
刚研究了下水源/水流使草方块转化为土方块的机制,观察到的机制大概如下:
1.水源方块/向下流的水流方块 下方的草方块会转化为土方块
2.向四周流的水流方块 下方的草方块不会转化为土方块
3.向四周流的水流方块 下方的土方块不会转化为草方块
总结如下:
土方块上方为水方块时,无论是水源还是水流,都不会转化回草方块。
草方块上方为固体方块、水源方块或向下流的水流方块时,会转化为土方块。
点赞0
评论
喵方块转土条件y < 320 && (blocks.getBlockInfo(chunk[x][y + 1][z].id).full || (chunk[x][y + 1][z].id == "minecraft:water" && [0, 8, 9, 10, 11, 12, 13, 14, 15].includes(chunk[x][y + 1][z].block_states.level)))
土转喵方块条件y == 320 || ["minecraft:air", "minecraft:cave_air", "minecraft:void_air"].includes(chunk[x][y + 1][z].id)
2024.9.6 水模型的不透明度会叠加,导致水越厚玩家越看不清水下面的东西。
点赞0
评论
可以让水后面的水不显示
但是水下的玩家需要看到旁边的水
除非……水下的人用蓝色滤镜?
不过用蓝色滤镜之后看顶部的水还是会叠加蓝色
2024.9.8玩家还能利用神岛的特性爬方块实体“梯#子”。(“#”作防屏蔽符号使用)
点赞0
评论
玩家可以卡实体边缘
有时候一些位置过去几十分钟都不会受到随机刻更新,可能是随机到空气浪费了随机刻更新机会,而且区块16*384*16的区域太大
java版gamerule默认值(参考zh.minecraft.wiki/w/%E6%B8%B8%E6%88%8F%E8%A7%84%E5%88%99?variant=zh-cn中的gamerule和默认值)键值对: "gamerule": { "announceAdvancements":true, "blockExplosionDropDecay":true, "commandBlockOutput":true, "commandModificationBlockLimit": 32768, "disableElytraMovementCheck": false, "disableRaids": false, "doDaylightCycle": true, "doEntityDrops": true, "doFireTick": true, "doImmediateRespawn": false, "doInsomnia": true, "doLimitedCrafting": false, "doMobLoot": true, "doMobSpawning": true, "doPatrolSpawning": true, "doTileDrops": true, "doTraderSpawning": true, "doVinesSpread": true, "doWardenSpawning": true, "doWeatherCycle": true, "drowningDamage": true, "enderPearlsVanishOnDeath": true, "fallDamage": true, "fireDamage": true, "forgiveDeadPlayers": true, "freezeDamage": true, "globalSoundEvents":true, "keepInventory":false, "lavaSourceConversion":false, "logAdminCommands":true, "maxCommandChainLength":65536, "maxCommandForkCount": 65536, "maxEntityCramming":24, "mobExplosionDropDecay":true, "mobGriefing":true, "naturalRegeneration":true, "playersNetherPortalCreativeDelay": 1, "playersNetherPortalDefaultDelay": 80, "playersSleepingPercentage":100, "projectilesCanBreakBlocks": true, "randomTickSpeed": 3, "reducedDebugInfo":false, "sendCommandFeedback": true, "showDeathMessages":true, "snowAccumulationHeight":1, "spawnChunkRadius": 2, "spawnRadius":10, "spectatorsGenerateChunks":true, "tntExplosionDropDecay":false, "universalAnger":false, "waterSourceConversion": true }
点赞0
评论
“2024.9.11 初步加入封闭区域实体优化(核心思想即去除周围方块都处于封闭区域内的方块)。
2024.9.12 修复部分封闭区域实体优化bug。
2024.9.13 修复所有封闭区域实体优化bug。”
这几天更新不多,一直在修方块实体优化bug。不过现在已经成功实现封闭区域实体优化功能了。



当然现在还是有一些问题,比如检测封闭区域时加载区块越多延迟越高。
实际上检测封闭区域时只要检测到y轴为320/-64的方块(已加载区块外算作边界,因为游戏会加载玩家周围区块,玩家看不到地图横截面)就可以判定为非封闭区域,甚至可以用启发式寻路算法提高效率,但是这样唯一的问题是无法给区域内closed状态发生变化的不完整方块旁边的所有完整方块发送更新使其检测能否优化。
点赞0
评论
加载3区块,2格深度封闭区域,延迟大概1240~3310ms(因为程序结构复杂不好测试,所以使用手动秒表测试,可能不准确;堵住区域开口一般比挖掉开口处障碍延迟小)
另外,为了让虚空下方的玩家能看到并点击到地图最底层方块,设定y=-64的方块不会优化。
这不是最极致的实体优化,最极致的实体优化大致是只显示看得见的和看得见的方块周围的,但是这种判断玩家视野范围的功能很复杂,所以暂时先一步一步优化。(绝对不是因为懒doge)
更新日志
--- Alpha ---
[Alpha 0.0.1]
2024.8.5 加入dirt、grass_block、water方块;优化MCBlock实体生成机制;加入玩家配置;加入创造模式放置、挖掘方块功能;使放置、挖掘方块时射线无视水方块。
2024.8.6 加入acacia_button方块;加入方块放置时对放置位置原有方块replaceable属性的检测;加入虚空伤害;加入复活功能。
2024.8.7 加入bedrock方块;矫正玩家大小;加入方块状态属性;加入基岩测试;加入acacia_leaves方块信息和物品信息。
2024.8.8 美化控制台输出格式;重构Player文件;加入方块放置碰撞箱检测,但错误08解决方案中的预算操作不太准确(e.velocity.mul(new GameVector3(3, 3, 3))没有计算方块实体碰撞箱出现延迟,也没有计算在方块实体碰撞箱出现前的时间里玩家会受到的加速度(例如撞到方块、被实体推动等)或在检测velocity后进行的跳跃)。
2024.8.9 加入grass_block方块;加入主手、副手;加入玩家按键监听;加入按键绑定;加入F键切换副手;加入日志Log标签筛选输出功能;加入acacia_log方块信息和物品信息;修正replaceable方块的玩家放置机制(水直接被射线穿透除外,点击replaceable方块放置方块位置为点击方块位置,不会加上raycast.normal计算);修正非固体方块的放置无碰撞检测;修正同种replaceable方块放置时不会出现“喵替换喵”的情况。
错误:喵有可能放置在另一个喵的上面/下面(矮喵丛不能放置在矮喵丛上,高喵丛放置后是2格高的喵,在矮喵丛上放置高喵丛可以把矮喵丛变成高喵丛)。
2024.8.10 修正grass_block、dirt、acacia_button方块;初步加入方块更新(NC更新和PP更新)。
2024.9.1 避免了方块更新对被替换方块造成的阻塞。
[Alpha 0.0.2]
2024.9.4 加入GameHandler和游戏主线程;初步加入随机刻。
2024.9.6 初步加入指令映射函数系统;加入gamemode 、gamemode 和gamerule 指令;加入randomTickSpeed规则;初步更换玩家对象从GamePlayer对象到MC#Player对象。(“#”作防屏蔽符号使用)
2024.9.8 初步加入指令解释器(用来解析是否存在某条指令和这条指令的某种语法格式,以及解析并替换指令中的“@a”“@e”“@p”“@s”和“~”等等指代符号为实际参数。);使部分有多种格式的指令映射到的函数模拟函数重载功能;初步加入实体渲染优化;加入玩家修改方块记录;加入server.properties服务器属性配置功能和转换properties为json的功能;修改方块更新处理方式;加入方块更新次数限制功能。
2024.9.9 加入地形生成。
2024.9.10 修复玩家在世界生成时可能受到虚空伤害的问题。
2024.9.11 初步加入封闭区域实体优化(核心思想即去除周围方块都处于封闭区域内的方块)。
2024.9.12 修复部分封闭区域实体优化bug。
2024.9.13 修复所有封闭区域实体优化bug。
[Alpha 0.0.3]
2024.9.14 修复封闭区域内有玩家时仍会把封闭区域进行优化的bug;加入使用BigInt类型的Xoroshiro128++随机数源。
2024.9.19 加入kill指令;修复@p选择错误的问题;初步加入客户端UI。
2024.9.20 (指令)加入玩家名称选择功能;完善玩家血量UI。
[Alpha 0.1.0]
2024.9.25 加入模块管理器,重构项目;设置旁观者模式无法与其他方块或实体交互。
点赞0
评论
[Alpha 0.1.1] 2024.9.27 加入密度函数,加入data\minecraft\worldgen\density_function\overworld中的json文件的内容。 2024.9.28 考虑加入其他方块实体数量优化,优化封闭区域优化算法的时间复杂度,考虑将优化对象从封闭区域转为无玩家区域,并考虑尽量减少bfs区域范围搜索,以及使用世界生成预处理。