提交中
📝正在回复 #1377360
jvk2iOze 2025-03-04 18:17:40
游戏开发日志
jvk2iOze Po 2025-03-04 18:19:11
总之来玩twine了,好玩!这个是我目前的story caption和menu片段的样子,效果如p3
85rj56aF 2025-03-04 18:21:41
>>Po.1377362
[ ゚∀。]!这个好厉害
jvk2iOze Po 2025-03-04 18:22:25
这个是ds写的记录片段返回组件,如果是偏向线性故事不太复杂的话应该够用,不过我这边测试出来有bug,例如侧边栏有背包和状态两个链接的话,进入背包还没有返回原片段时就再进一次状态栏,上一个片段就会被记录成背包,从状态栏退出时只能返回到背包,上一步就没有了,我准备改一下,不过也能用!
<<widget "navigate">>
<<nobr>>
/* 处理导航指令 */
<<if $args[0] === "go">>
/* 跳转到目标片段,并记录当前片段 */
<<set $returnPassage = passage()>> /* 记录当前片段 */
<<goto $args[1]>> /* 跳转到目标片段 */
<<elseif $args[0] === "back">>
/* 返回记录的片段 */
<<if $returnPassage>>
<<goto $returnPassage>> /* 返回记录的片段 */
<<else>>
<<print "无法返回,未记录原片段。">>
<<endif>>
<<else>>
<<print "无效的导航指令。">>
<<endif>>
<</nobr>>
<</widget>>
jvk2iOze Po 2025-03-04 18:26:14
>>Po.1377364
[ ゚∀。]9侧边栏真的很好用!
85rj56aF 2025-03-04 18:27:27
>>Po.1377369
[ ゚∀。]9等我粥日常做完开搞试试!
jvk2iOze Po 2025-03-05 11:01:45
返回片段更新!
<<widget "navigate">>
<<nobr>>
/* 处理导航指令 */
<<if $args[0] === "go">>
/* 如果目标片段不是特殊片段,则记录当前片段 */
<<if !$specialPassages.includes(passage())>>
<<set $returnPassage = passage()>> /* 记录当前片段 */
<</if>>
<<goto $args[1]>> /* 跳转到目标片段 */
<<elseif $args[0] === "back">>
/* 返回记录的片段 */
<<if $returnPassage>>
<<goto $returnPassage>> /* 返回记录的片段 */
<<else>>
<<print "无法返回,未记录原片段。">>
<<endif>>
<<else>>
<<print "无效的导航指令。">>
<<endif>>
<</nobr>>
<</widget>>

实现了特殊片段的不记录,例如侧边栏中同时加入背包和状态两个需要点开和返回的页面,按照之前的逻辑是先记录游戏主场-跳转到背包-返回被记录的主场景,但如果在背包里再次使用侧边栏打开状态栏,记录会被覆盖为背包,即返回只能回到背包,没法回到主场景,由此卡住,这个新版本加入了判断当前片段是否为特殊片段(即背包状态栏),如果是则不更新记录,永远回到主场景!但需要在story init部分加入特殊片段列表,好在这些片段不会太多
特殊片段记录
<<set $specialPassages = ["backpack", "ship"]>>
jvk2iOze Po 2025-03-06 02:29:30
把思路也打在这里方便归纳一下……地图系统计划也用变量组来做,通过key来随机生成地区
<<set $map = {
sand: { type: "沙海床",depthmin:"20", depthmax: "10000", spanmin:"800",spanmax:"40000" },
flat: { type: "岩海床",depthmin:"200", depthmax: "500", spanmin:"2000",spanmax:"6000" },
cliff: { type: "峭壁",depthmin:"300", depthmax: "10000", spanmin:"1000",spanmax:"3000" },
grass: { type: "海草床",depthmin:"20", depthmax: "100", spanmin:"1000",spanmax:"4000" },
reef: { type: "珊瑚礁",depthmin:"20", depthmax: "100", spanmin:"500",spanmax:"2000" },
forest: { type: "海藻森林",depthmin:"200", depthmax: "600", spanmin:"1000",spanmax:"5000" }

}>>
jvk2iOze Po 2025-03-06 02:31:38
生成的随机倒是比较简单,但问题是深度应该是比较平缓变化的数字,这个该怎么随机呢……晚点再说吧,初期一个区域先固定一个深度,把前进和上升下潜跨区完成了再说,今天先睡明天还要做实验[ X∀X]
jvk2iOze Po 2025-03-06 18:00:55
说起来widget到底是怎么运行的……如果可以的话不想把计算在六维运算里面了实在太挤了……如果可以的话最好把六维运算放在地图判定之后,所以新建一个widget会比较好

首先在开始航行动作时set sailpass= timepass,自动航行和手动航行分成两组,自动航行的话可以在六维里设置一个sailpass-=timepass,直到sailpass<=0时弹出提示航行结束,不加事件中断的话会比较简单,手动航行的话需要加视觉判定效果
jvk2iOze Po 2025-03-08 03:39:16
依赖ds完成了根据权重随机选择地形,明天试试看能不能把根据地形随机生成当前地形跨度、当前地形最大深度、前进跨区,线性地图生成能完成的话再加纵深
jvk2iOze Po 2025-03-22 22:52:11
给地图系统加个解释吧

mapinfo:地形基础信息存储
map:当前坐标
depth:当前深度

maplim:当前地图长度

depthdeep:当前最大深度
depthspd:深度变化速度
depthwave:深度变化路段
jvk2iOze Po 2025-03-22 22:55:35
如果map>=maplim的话

①map归零
②重新生成新的maptype
③根据maptype在mapinfo里检索可能的长度和深度,生成新的maplim和depthdeep
jvk2iOze Po 2025-03-22 23:01:09
depthspd如果为负数的话就是变浅,正数下降

depthdeep =depthdeep+depthspd*depthpass

好像得增加一个变量存储已经走过的深度变化路段,那就pass吧
变化过后depthpass=0
如果要实现逐级变化的话最好增加时间存储
jvk2iOze Po 2025-03-23 12:14:39
sailtime 预先设置的航行时间
sailpass 记录已经行驶过的部分
jvk2iOze Po 2025-03-23 12:30:57
逻辑顺序

开始航行
设定sailtime
按照时间刷新页面+执行sail组件

执行——
map+1
sailpass+1
depthpass+1
判断是否跨区,是则maptype等一系列变量刷新
否则继续
depthdeep变化
判断depthwave,如果depthpass>depthwave或depthdeep达到区域上下限则刷新wave&刷新depthspd
显示sailpass,实时渲染描述
——继续下一个定时循环
jvk2iOze Po 2025-03-23 12:37:39
比如一个3600跨度的区域的话……一秒一循环,路上没有任何停顿的话就需要3600秒,也就是60分钟,放着刷一个小时才能通过……感觉也差不多,在游戏内就是60小时,必然需要花等同的时间来生活,还要探索环境和积累资源,要玩几天才能穿过一个区域,基本没有速通
jvk2iOze Po 2025-03-23 19:05:36
按秒跳动实现了!但是因为是靠ds实现的[ ゚∀。]所以还有一串bug,不过感觉都是我能力范围内可以解决的,我修我修
jvk2iOze Po 2025-03-25 18:12:25
按秒跳动、深度变化完成了,字符串和数字的转换bug修好,试试看能不能给侧边栏也实时跳动,感觉加上时间变化应该就没问题了,这下地形深度时间系统都有了,得做场景描述系统
jvk2iOze Po 2025-03-28 19:09:00
放一下代码方便翻找

<<nobr>>
<<widget "time" >>


<<set $hourpass =Math.floor($timepass/60)>>
/*饥饿扣血*/
<<if $hunger==0>>
<<set $hungerlim+=$timepass>>
<<if $hungerlim>0>>
<<set $life-=Math.floor($hungerlim/60)>>
<<set $hungerlim=$hungerlim%60>>
<<endif>>
<<endif>>
<<if $hunger>0>>
<<set $hungerlim=-4320>>
<<endif>>
/*口渴扣血*/
<<if $water==0>>
<<set $waterlim+=$timepass>>
<<if $waterlim>0>>
<<set $life-=Math.floor($waterlim/60)>>
<<set $waterlim=$waterlim%60>>
<<endif>>
<<endif>>
<<if $water>0>>
<<set $waterlim=-1440>>
<<endif>>
jvk2iOze Po 2025-03-28 19:10:10
/*食水时间变化*/
<<set $hungerpass +=$timepass>>
<<set $waterpass +=$timepass>>
<<set $hunger -=Math.floor($hungerpass/15)>>
<<set $water -=Math.floor($waterpass/15)>>

/*食水上下限控制*/
<<if $hunger <0 >>
<<set $hunger = 0>>
<<endif>>
<<if $water <0 >>
<<set $water = 0>>
<<endif>>
<<if $hunger>100>>
<<set $hunger = 100>>
<<endif>>
<<if $water>100>>
<<set $water = 100>>
<<endif>>


<<set $hungerpass =$hungerpass%15>>
<<set $waterpass =$waterpass%15>>
/*体力变化上下限*/
<<if $power <0>>
<<set $power =0>>
<<endif>>

<<if $hunger>0 && $water>0 >>
<<set $powerpass+= $timepass>>
<<set $power +=Math.floor($powerpass/5)>>
<<set $powerpass= $powerpass%5>>
<<if $power >100 >>
<<set $power=100>>
<<endif>>
<<endif>>
是否立即朝美国发射核弹?
为 #654 送出表情
上下滚动,选择表情
👍 赞!
👎 这不好
😆 欢乐
🎉 烟花
😕 嗯...
💗 爱心
🐱 喵喵喵
🐭 鼠鼠我呀
🐔
🐷 猪头
🐶 我是狗?
冲刺!冲!
😱 吓死了
👀 就看看
🤡 小丑
🀄 太中咧!
🤣 笑哭
😅 这...
😫 痛苦面具
😭 我哭死
😋 我吃吃吃
🦪 牡蛎哟牡蛎
🈁 ko↓ko↑
🤔 嗯?
🤤 发癫
🥺 求你了
😡
耶!
🦸 你是英雄
🍾 开香槟咯
🌿
送出该表情需要消耗 20 积分