Project1

标题: (已解决)关于MZ图片鼠标互动 [打印本页]

作者: 火锅深处    时间: 2021-2-6 18:19
标题: (已解决)关于MZ图片鼠标互动
本帖最后由 火锅深处 于 2021-2-6 21:15 编辑

解决了。把2楼老鹰红色圈出那句替换成了这个return bx>0 &&bx<pic.width&&by>0&&by<pic.height;
=====================================================
呃,我没有发错区。只是觉得这个问题是不是和图片格式这种通常问题有关。(以及MZ区太冷了我觉得可能没人回答
这个插件就是能让鼠标悬浮或点击图片的时候发生公共事件。
但是,它好像就只对png里有图案的部分有反应,点击旁边的透明部分没用。像我现在这种镂空的选项图片,点在那个小横线上方两个像素左右的地方它都没反应...对精确度要求这么高的话操作手感太糟糕了。

所以说是png和鼠标互动的只能是非透明部分呢,还是说把“整张图片(透明与非透明都算)”作为鼠标互动的对象也行?
(因为不是技术区所以不用说具体的解决方法也没问题,我就是想问问这个和图片自身的格式有没有关系)
看到MV版本有个类似的东西https://rpg.blue/thread-404083-1-1.html可能是这个的逆操作版本...

插件本体(MIT公约)


回过头看了作者的网站,MV版是由“透明区域是否判定”的选项的,所以估计MZ版本以后倒是也会更新 (感觉问题解决到这个地步好像已经不适合水区了)
MV

load_active.png (10.09 KB, 下载次数: 6)

load_active.png

作者: 百里_飞柳    时间: 2021-2-6 20:29
423行的代码里
        isOnPicturePos(x = TouchInput.x, y = TouchInput.y) {
            const pic = this._picture;
            if (!pic.bitmap || !pic.bitmap.isReady() || pic.scale.x === 0 || pic.scale.y === 0) {
                return false;
            }
            if (this.isTouchPosInFrameWindow()) {
                return true;
            }
            const dx  = this.getTouchScreenX(x) - pic.x;
            const dy  = this.getTouchScreenY(y) - pic.y;
            const sin = Math.sin(-pic.rotation);
            const cos = Math.cos(-pic.rotation);
            const bx = Math.floor(dx * cos + dy * -sin) / pic.scale.x + pic.anchor.x * pic.width;
            const by = Math.floor(dx * sin + dy * cos) / pic.scale.y + pic.anchor.y * pic.height;
            return pic.bitmap.getAlphaPixel(bx, by) !== 0;
        }
它贴心帮你判定了,点击处不为透明像素才算成功点击




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1