UNPKG

ycc-engine

Version:

Mini and powerful canvas engine for creating App or Game.

137 lines (115 loc) 3.04 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name=viewport content="width=device-width,initial-scale=1,user-scalable=0,viewport-fit=cover"> <title>多边形示例</title> <link rel="stylesheet" href="../style.css"> </head> <body> <div class="return-btn"> <a href="../"> 返回首页 </a> </div> <div class="tip"> <h3>示例说明:</h3> <div> 1、这个示例展示系统的多边形功能。<br> 2、下面是用多边形来绘制的五角星。<br> 3、可以通过五角星的控制点来变换多边形的形状。<br> 4、还可以点击图形区域触发点击事件,区域内判断采用光线投射原理<br> 5、若未采用noneZeroMode,只能点击五角星的各个角落,并不能点击五角星内部的五边形<br> 6、第一个五角星未采用noneZeroMode<br> </div> <br><br> </div> <div id="canvas"> </div> </body> </html> <script src="http://localhost:9000/livereload.js"></script> <script src="../common.js"></script> <script src="../../build/ycc.js"></script> <script> var coordinates = [ {x:50,y:100}, {x:250,y:100}, {x:100,y:150}, {x:150,y:50}, {x:200,y:150}, {x:50,y:100}, ]; var coordinates2 = [ {x:50,y:300}, {x:250,y:300}, {x:100,y:350}, {x:150,y:250}, {x:200,y:350}, {x:50,y:300}, ]; var ycc = new Ycc(); var canvas = ycc.createCanvas({width:300,height:480,dpiAdaptation:true}); document.getElementById("canvas").appendChild(canvas); ycc.bindCanvas(canvas); // 新建图层 var layer = ycc.layerManager.newLayer({enableEventManager:true}); var polygon = new Ycc.UI.Polygon({ coordinates:coordinates, fill:false, fillStyle:"red", noneZeroMode:2, strokeStyle:"blue", ontap:function (e) { alert('点中了图形!只能点击角落'); } }); layer.addUI(polygon); coordinates.forEach(function (dot,i) { if(i===coordinates.length-1) return; layer.addUI(new Ycc.UI.Rect({ rect:new Ycc.Math.Rect(dot.x-5,dot.y-5,10,10), fill:true, color:'#666', ondragging:function (e) { dot.x=e.x; dot.y=e.y; this.rect.x = e.x-5; this.rect.y = e.y-5; ycc.layerManager.reRenderAllLayerToStage(); } })); }); var polygon2 = new Ycc.UI.Polygon({ coordinates:coordinates2, fill:true, fillStyle:"red", noneZeroMode:1, strokeStyle:"blue", ontap:function (e) { alert('点中了图形!'); } }); layer.addUI(polygon2); coordinates2.forEach(function (dot,i) { if(i===coordinates2.length-1) return; layer.addUI(new Ycc.UI.Rect({ rect:new Ycc.Math.Rect(dot.x-5,dot.y-5,10,10), fill:true, color:'#666', ondragging:function (e) { dot.x=e.x; dot.y=e.y; this.rect.x = e.x-5; this.rect.y = e.y-5; ycc.layerManager.reRenderAllLayerToStage(); } })); }); layer.onmousemove = function (e) { if(ycc.getUIFromPointer(new Ycc.Math.Dot(e),true)===polygon2) polygon2.fillStyle="blue"; else polygon2.fillStyle="red"; ycc.layerManager.reRenderAllLayerToStage(); }; ycc.layerManager.reRenderAllLayerToStage(); </script>