javascript - 绘制 Phaser 饼图的问题
问题描述
我正在尝试使用 Phaser 创建一个饼图,graphics
用于绘制饼图的每个切片 ( graphics.arc(...)
)。问题是,当它呈现时,我得到(我认为)一个意想不到的结果。
我基本上想绘制 3 个相同大小的切片,我使用的代码如下所示:
function degToRad(degrees) {
return (degrees * Math.PI)/180;
}
var total = 3;
var width = 300;
for (var i = 0; i < total; i++) {
var radius = Math.floor(width / 2);
var deg = 360 / total;
var start = degToRad(i * deg);
var end = degToRad((i + 1) * deg);
graphics = game.add.graphics()
graphics.beginFill(0xFF0000)
graphics.lineStyle(2, 0x000000)
graphics.moveTo(0, 0);
graphics.arc(0, 0, radius, start, end, false);
graphics.endFill()
}
我创建了 3 个小提琴来展示基于画布、pixi 和移相器的示例之间的区别,它们中的每一个都使用相同的过程来绘制切片:
画布:https ://jsfiddle.net/oL414v9t/1/
小精灵:http : //jsfiddle.net/ngma7snq/59/
移相器:https ://jsfiddle.net/1ck39fos/1/
有谁知道为什么会发生这种情况以及我怎样才能实现我想要的?
解决方案
在我看来,arc
在Graphics.js
. 您可以顺时针或逆时针绘制弧线,但如果您选择顺时针(如在您的代码示例中),那么它看起来不会返回到弧线的中心,请参见此处的代码。
如果您更改代码以使其按逆时针顺序绘制线段,则它可以工作。您必须将最后一个参数设置arc
为 true 而不是 false,并更改一些其他内容。请参阅下面的代码,这似乎有效。
function create() {
var total = 3;
var colors = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF];
for (var i = 0; i < total; i++) {
var centerX = Math.floor(width / 2);
var centerY = Math.floor(height / 2);
var radius = Math.floor(width / 2);
var deg = 360 / total;
var start = degreesToRadians(total-i * deg);
var end = degreesToRadians((total-i - 1) * deg);
graphics = game.add.graphics();
graphics.beginFill(colors[i]);
graphics.lineStyle(2, 0x000000);
graphics.moveTo(centerX, centerY);
graphics.arc(centerX, centerY, radius, start, end, true);
graphics.endFill()
game.stage.addChild(graphics);
}
}
推荐阅读
- php - 如何注册/聚集父子类?
- spring-boot - SpringBoot 应用程序在部署到 EC2 实例后 2 天给出 RestClientException(未知状态代码 [494] null)
- php - wkhtmltoimage 的参数列表太长错误
- nsq - NSQ 无法收到消息
- javascript - 正则表达式只允许字母,没有特殊字符,开头没有空格
- java - Java项目的规范项目布局?
- c# - C# 中的内部方法 System.Double.IsNegative() 是什么?
- fabricjs - Fabric Js requestRenderAll() 方法与 renderAll() 方法
- javascript - 收到错误 TypeError: color.charAt is not a function in C:/...../node_modules/@material-ui/core/styles/colorManipulator.js:148
- json - pickerView 在 Swift 5 代码中使用 SwiftyJSON 加载从 Alamofire 4.8.2 获取的 JSON 数据失败