更完善的多边形框
https://github.com/jkjkil4/PolygonBorderAdvanced.git
更完善的多边形框 基于布尔运算进行加减
更简单的版本:https://gitee.com/jkjkil4/PolygonBorder
poly.verts = [[0, 0], [50, 50], [-50, 50]]; mixPoly([poly1, poly2, ...]) 来得到加减后的结果...
// 默认 OF_Add,不写也行
poly1.operFlag = OperateFlag.OF_Add; // “加框”
poly2.operFlag = OperateFlag.OF_Add; // “加框”
mixed = mixPoly([poly1, poly2]); // 两框相加的结果
...
poly1.operFlag = OperateFlag.OF_Add; // “加框”
poly2.operFlag = OperateFlag.OF_Sub; // “减框”
mixed = mixPoly([poly1, poly2]); // 两框相减的结果
...
/* poly1, poly2, poly3 的 operFlag 分别为 OF_Add, OF_Sub, OF_Add */
mixed = mixPoly([poly1, poly2, poly3]); // poly1 先减去 poly2,再加上 poly3
isPointInsidePolylines(x, y, lines) 即可判断 (x, y) 是否在框内limitPoint(x, y, lines) 即可得到 (x, y) 离 lines 最近的位置 // 步事件(Step Event)
var lines = mixPoly([poly]); // 得到边
if !isPointInsidePolylines(playerX, playerY, lines) { //判断是否在内部
var pos = limitPoint(playerX, playerY, lines); //如果不在内部则得到限制结果
playerX = pos[0];
playerY = pos[1];
}
poly.updateTriangles() 来更新多边形的三角剖分
mixPoly([...]) 类似,调用 mixAlpha([..]) 即可使用遮罩,(如示例3)://绘制事件(Draw Event)
if !surface_exists(surf) //当surf凭空消失时重新创建
surf = surface_create(/* 宽 */, /* 高 */);
surface_set_target(surf); //设置在surf上绘制
/*
这里写想要被遮罩的东西
(一般最开始先draw_clear或draw_clear_alpha清空原有内容,然后再绘制东西)
*/
clearAlpha(0); // 将 surf 上的透明度全部设置为 0(完全透明)
mixAlpha([...]); // 根据多边形来对透明度进行修改
surface_reset_target(); // 设置在屏幕上绘制
draw_surface(surf, 0, 0); // 绘制 surf
poly.rotSpeed = 3; 就是让框每步旋转3度