Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML 5财富之轮(午餐轮)_Javascript_Html - Fatal编程技术网

Javascript HTML 5财富之轮(午餐轮)

Javascript HTML 5财富之轮(午餐轮),javascript,html,Javascript,Html,我一直在使用HTML5编写一个简单的幸运轮实现表单,但在查找赢家部分时遇到了一些问题,下面是JSFIDLE中的代码: // Called when segments have changed update: function() { // Ensure we start mid way on a item //var r = Math.floor(Math.random() * wheel.segments.length); var r = 0; wheel.an

我一直在使用HTML5编写一个简单的幸运轮实现表单,但在查找赢家部分时遇到了一些问题,下面是JSFIDLE中的代码:

// Called when segments have changed
update: function() {
    // Ensure we start mid way on a item
    //var r = Math.floor(Math.random() * wheel.segments.length);
    var r = 0;
    wheel.angleCurrent = ((r + 0.5) / wheel.segments.length) * Math.PI * 2;

    var segments = wheel.segments;
    var len = segments.length;
    var colors = wheel.colors;
    var colorLen = colors.length;

    // Generate a color cache (so we have consistant coloring)
    var seg_color = new Array();
    for (var i = 0; i < len; i++)
    seg_color.push(colors[segments[i].hashCode().mod(colorLen)]);

    wheel.seg_color = seg_color;

    wheel.draw();
}

JSFIDLE中的重要功能:

// Called when segments have changed
update: function() {
    // Ensure we start mid way on a item
    //var r = Math.floor(Math.random() * wheel.segments.length);
    var r = 0;
    wheel.angleCurrent = ((r + 0.5) / wheel.segments.length) * Math.PI * 2;

    var segments = wheel.segments;
    var len = segments.length;
    var colors = wheel.colors;
    var colorLen = colors.length;

    // Generate a color cache (so we have consistant coloring)
    var seg_color = new Array();
    for (var i = 0; i < len; i++)
    seg_color.push(colors[segments[i].hashCode().mod(colorLen)]);

    wheel.seg_color = seg_color;

    wheel.draw();
}
第256行是当前代码获得赢家的位置:

var i = wheel.segments.length - Math.floor((wheel.angleCurrent / (Math.PI * 2)) * wheel.segments.length) - 1;
但那是在方向盘的右边,我正试图让它成为赢家的一分。我已经为此奋斗了很长时间,我感谢你的帮助或指导。谢谢。解释如下:

首先,我们需要将指针绘制到车轮顶部的正确位置:

drawNeedle: function() {
    ...
    ctx.beginPath();
    ctx.moveTo(centerX + 20, centerY - size - 20);
    ctx.lineTo(centerX - 20, centerY - size - 20);
    ctx.lineTo(centerX  , centerY - size + 20);
    ctx.closePath();
    ...
}
在您给出的代码段中:

var i = wheel.segments.length - Math.floor((wheel.angleCurrent / (Math.PI * 2)) * wheel.segments.length) - 1;
wheel.angleCurrent/(Math.PI*2)
部分表示它位于右侧。请注意,在JavaScript中,这就是“单位圆”的起点。要解决这个问题,我们只需要将角度偏移90度(或者在本例中添加
Math.PI/2
弧度):

var change=wheel.angleCurrent+(数学PI/2);
变量i=wheel.segments.length-数学地板((更改/(数学PI*2))*wheel.segments.length)-1;
如果(i<0)i=i+17;//17=车轮.节段.长度
计算
i
的方式取决于我们从右侧开始。当我们将其从
-5更改为12时,它会偏移一些项,而不是从
0更改为16。要解决负项(我们的抵消项)的问题,我们只需要将它们添加到13到16。换言之,加上17(这与
wheel.segments.length
)相同。

你太棒了,:)我想我已经为此奋斗了很久了。谢谢。
    var change = wheel.angleCurrent + (Math.PI/2);
    var i = wheel.segments.length - Math.floor((change / ( Math.PI * 2)) * wheel.segments.length) - 1;
    if(i < 0) i = i + 17; // 17 = wheel.segments.length