
iFVN - AVG文字游戏制作工具





我们在第一部分的基础上,添加了用于跟踪温度和降水类型的变量。 和时间一样,温度的建模相对简单,它只是一个数字。但由于温度与时间相关,我们需要知道当前时间才能提供合理的温度。我使用了一个基于日平均温度的简单模型,然后在其上添加一个预先计算好的余弦曲线。 模拟温度 var hourly_temperature = []; function generate_seasonal_avg_temp() { var base_t = 69; var mod_t = 0; switch(RV.GameData. { case 0: mod_t = 15; break; case 1: mod_t = -15; break; case 2: case 3: mod_t = 10; break; case 4: case 5: mod_t = 0; break; case 6: mod_t = 15; break; case 7: mod_t = -5; break; case 8: mod_t = -10; break; case 9: mod_t = -20; break; case 10: mod_t = -30; break; case 11: mod_t = 12; break; default: GameData.无法识别内容,已删除。
通过对代码稍作修改,你可以轻松获得判断场景中哪些物品被点击以及它们从哪个文件夹加载的功能。 RV脚本修改: 在RV函数体内添加以下代码行: RV.ImageData = []; RV.Selection = []; 这会创建一个用于存储场景图像边界框的数组和一个用于存储选中物品的数组。这些数组是临时的,不会随其他游戏数据一起保存。 IM3脚本修改: 在脚本顶部、所有函数之外添加以下代码: function ImageHitbox(id, name, type, x, y, width, height) { this.id = id; // 图层id this.name = name; this.type = type; this.x = x; this.y = y; this.width = width; this.height = height; this.selected = false; } 这定义了一个对象,用于保存图片在屏幕上的位置信息、图片名称(name)以及加载来源(type)。 向下滚动,在IM.PicShow函数体内找到以下行: var view = RV.NowCanvas.getView(); var sp = new ISprite(RF.LoadBitmap("Picture/" + path),view); 在它们正下方添加以下代码: var hb_rx = /([a-z0-9-_]+) ([a-z0-9-_]+).(png|jpg)/ig; var res = hb_rx.exec(path); log(`generating hitbox region: ${res[2]}, ${res[1]}, ${x}, ${y}, ${sp.width}, ${sp.height}`); RV.ImageData.push(new ImageHitbox(id, res[2], res[1], x, y, sp.width, sp.每次iFVN加载场景中的图像时,都会将名称、类型和边界框添加到你的游戏数据中。 全局脚本 在代码的其他位置,添加: function HitTest(min=50) // 默认图层,小于此值的图层将不被测试 { var mx = IInput.x; var my = IInput.y; for (var p = 0; p < RV.ImageData.length; p++) { if ( (RV.ImageData.selected == false) && (IInput.up) && (RV.ImageData.id >= min) && (mx >= RV.ImageData.x) && (mx <= (RV.ImageData.x + RV.ImageData.width)) && (my >= RV.ImageData.y) && (my <= (RV.ImageData.y + RV.ImageData.height)) ) { RV.ImageData.selected = true; RV.Selection.push(RV.ImageData ); 记录(`已选择: ${RV.ImageData .name}, ${RV.ImageData .selected}, ${RV.ImageData .type}`); 中断; } 否则 RV.ImageData .selected = 否; } }[/code] 通用触发器 最后,你还需要在输入循环(通用触发器)中添加一个命中测试的脚本调用 重置数据 每当加载新场景时,像这样清除旧数据:RV.ImageData = [];










