2013-03-27 72 views
0

我正在创建一个游戏,我正在试图画一条跟随着我的手指的线。我正在使用椋鸟图形axtension为此,这是工作非常好,你可以看到我是如何做到这一点。画一条跟随你的手指的线

if (begin) { 
    _startPoint = new Point(begin.globalX, begin.globalY); 
    _line.graphics.lineStyle(1, 0xffffff, 1); 
    addChild(_line); 
} else if (moved) { 
    var width:Number = MathUtils.DistanceBetweetnTwoPoints(_startPoint.x, _startPoint.y, moved.globalX, moved.globalY); 
    _currentPoint = new Point(moved.globalX, moved.globalY); 
    _line.graphics.clear(); 
    _line.graphics.moveTo(_startPoint.x, _startPoint.y); 
    _line.graphics.lineTo(_currentPoint.x, _currentPoint.y); 
} else if (end) { 
    _line.graphics.clear(); 
    _endPoint = new Point(end.globalX, end.globalY); 
    addBlock(_startPoint, _endPoint); 
} 

所以我想要做的是以下几点。 Atm时刻它只是跟随我的手指(从起点到当前点画一条线,但是我想输入一个最大宽度,比如说50,如果它跨越50的长度,它应该跟随我的手指旋转。不再是它,但它确实跟踪我的手指的方向并朝它旋转

而最后一件事(尽管我不确定是否可能)是让线从绿色变为红色,更接近它的最大长度(所以整条线是绿色的,但它变成红色越接近50)

我不知道如何实现这个笑,如果有人能指出我在正确的方向。

回答

1

如果分数足够,则:

  1. 您计算立足点和接触点之间的距离。如果低于您的阈值,请画满线。
  2. 如果不是,您将计算您希望的长度和X和Y在角度和接触点之间的增量之间的比例,您将收到一个中间点,该中间点将是您画出的线条的末端。
  3. 要选择颜色,请在绿色和红色之间进行HSV或RGB插值。 uint(255*lineLength/50)*0x10000+uint(255*(1.0-lineLength/50))*0x100的一个愚蠢的例子将会有一段时间。这里的lineLength的范围是从0到50.0。

当你计算完所有这些之后,你就像你一样绘制一条线。

还有一个挑剔:线条“宽度”被命名为“厚度”,在您的示例中为1(与颜色一起在lineStyle中设置)。

+0

+1。打字几乎正是这个,但你的颜色操作更整洁。 @vincent,请注意你需要对你的'_endPoint'应用相同的比例缩放。 – 2013-03-27 08:20:37

+0

你会如何计算这一点?非常抱歉,数学不是我最强烈的观点:( – vincent 2013-03-27 08:32:31

+0

那么,学习数学将会帮助你很多事情,一旦你开始沉迷于编程:)首先,你计算你必须绘制的部分:var part :Number = 50.0/lineLength;'然后你计算X&Y为:'newX = _startpoint.x +(_ endpoint.x-_startpoint.x)* part;'(对于Y开关'.x'代表'.y')。 – Vesper 2013-03-27 08:37:17