不能使用 Shapes 的所有参数来控制 GraphicsWindow 中的线

Can't use all arguments with Shapes to control line in the GraphicsWindow

在 small basic 中尝试了一些东西来使一条线跟随鼠标移动但不移动整条线之后,我最近遇到了一个问题。最初我试图通过清除图形 window 并从右下角重新绘制一条线到鼠标来不断更新线,以便它保持从一个点到鼠标位置的连接。这行不通,而且是资源密集型的。但是,现在我遇到了 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 个参数:

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

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

啊是的。这些都是小基本的缺点。 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) 函数。

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