下载客户端

场景中图像的碰撞检测

2026-03-21 01:00:20

导读

本文介绍了实现场景中图像碰撞检测的方法,通过修改RV、IM3脚本,添加全局脚本和通用触发器调用,可判断场景中被点击物品及其加载来源,核心为图像碰撞检测的脚本修改实现。

通过对代码稍作修改,你可以轻松获得判断场景中哪些物品被点击以及它们从哪个文件夹加载的功能。 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 = [];

评论

共0条评论
face
inputImg
相关阅读
最新更新

最新更新

  • 脚本与代码小合集 — 这是一份由开发者和用户在IFAction讨论区分享的、适用于一般用途的实用脚本和代码的小型基础参考,且在iFVN中同样适用。 代码与脚本 隐藏AVG自动存档提示…
  • 在iFVN中通过脚本使用变量(第二部分) — 在第二部分中,我们将介绍如何通过iFVN中的脚本更高级地使用字符串变量及其用法。 通过脚本高级使用字符串变量 注意: 此知识仅基于我在iFVN中的个人经验以及网…
  • 为iFVN增添深度:第二部分 - 模拟温度系统 — 我们在第一部分的基础上,添加了用于跟踪温度和降水类型的变量。 和时间一样,温度的建模相对简单,它只是一个数字。但由于温度与时间相关,我们需要知道当前时间才能提供…
  • 为iFVN增添深度:第一部分 - 模拟时间 — 你是否玩过这样的角色扮演游戏:无论何时见到NPC,他们的行为都一成不变?无论天气如何,也不管周围激战正酣,他们总是站在初次相遇的地方。没错,我也玩过。这体验太差…
  • 在iFVN中通过脚本使用变量(第一部分) — 这是一份面向非程序员的iFVN脚本变量基础使用参考。在某些情况下,它有助于节省或减少游戏中使用的变量数量,实现更高效或更高级的变量运用。 变量简介 在iFVN中…
  • 场景中图像的碰撞检测 — 通过对代码稍作修改,你可以轻松获得判断场景中哪些物品被点击以及它们从哪个文件夹加载的功能。 RV脚本修改: 在RV函数体内添加以下代码行: RV.ImageDa…