
通过对代码稍作修改,你可以轻松获得判断场景中哪些物品被点击以及它们从哪个文件夹加载的功能。 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 = [];
2026-03-21 01:00:20 发布在
iFVN - AVG文字游戏制作工具
说点好听的...
收藏
0
0
