1

在尝试了一些小基本内的东西以使一条线跟随鼠标但不移动整条线之后,我最近遇到了一个问题。最初我试图不断更新线,以便通过清除图形窗口并从右下角重新绘制一条线到鼠标来保持从一个点到鼠标位置的连接。这是行不通的,而且是资源密集型的。但是,现在我遇到了 Shape.addline 和 shape.move。但我不太确定它们是如何工作的,根据我的理解,一个形状可以通过这样做有自己的名字:

[Shapename] = Shapes.addline(positions)

然后可以使用以下方法移动该形状:

Shapes.move(Shapename,Coordinates)

就我而言,它是:

L1 = Shapes.AddLine(0,GraphicsWindow.Height,GraphicsWindow.MouseX,GraphicsWindow.MouseY)

(从左下角到鼠标位置画一条线)

Shapes.Move(L1,GraphicsWindow.MouseX,GraphicsWindow.MouseY)

唯一的问题是 Shapes.Move 仅支持 3 个参数:

  • 形状名称

  • X

但是,在画线(Shapes.AddLine)时,我使用了 4 个参数:

  • X1

  • Y1

  • X2

  • Y2

这意味着我只能控制这两个位置。那么,你将如何控制另外两个?如果我们只能修改 X1 和 Y1,有没有办法仍然使用至少类似于 shape.move 方法但能够控制其他 X2 和 Y2 位置的方法?首先,我想实际上改变 X2 和 Y2 的位置,因为我试图让一条线从一个点开始并停留在那里,然后改变相对的点,使其跟随鼠标,而不是移动整个形状. 如果这一切都不可能,是否有任何已知的方法可以仅移动/更改一条线的 X2 和 Y2 坐标而无需清除整个屏幕?

4

2 回答 2

1

是的。这些都是小基本的缺点。Shapes.move 不会让您定义一条线的起点和终点。您需要做的是在第一个点和光标之间移动线的中心,并正确旋转它。像这样:

Mouseline = Shapes.AddLine(0,0,100,0)
Shapes.Move(Mouseline,200,200)
GraphicsWindow.MouseMove = OnMouseMove


Sub OnMouseMove
 XDif = (GraphicsWindow.MouseX-250)
 YDif = (GraphicsWindow.MouseY-200)
 If XDif <> 0 Then
 MouseAngle = Math.ArcTan(YDif/XDif)
 EndIf
 If XDif < 0 Then
 MouseAngle = MouseAngle + 3.14 '180 degrees in radians
 EndIf
 Shapes.Rotate(Mouseline,Math.GetDegrees(MouseAngle))
 Shapes.Move(Mouseline,(Math.Cos(MouseAngle)*50)+200,(Math.Sin(MouseAngle)*50)+200)
EndSub

另一种方法是使用 LitDev 扩展 ( http://litdev.co.uk/ )。它有一个 MoveLine(x1,y1,x2,y2) 函数。

于 2016-01-02T01:02:45.070 回答
1

我猜你会改变程序的结尾,它说 math.cos(mouseangle) 将 200 更改为 0 并将其他 200 更改为底部。所以,如果我想弄清楚什么,你试图让这条线只在皮质平面的第一象限投影,是吗?

于 2016-01-02T16:23:13.160 回答