Shapes 无法使用形状的所有参数来控制图形中的线条

Shapes 无法使用形状的所有参数来控制图形中的线条,shapes,smallbasic,Shapes,Smallbasic,在尝试了small basic中的一些东西以使一条线跟随鼠标但不移动整条线之后,我最近遇到了一个问题。最初,我试图通过清除图形窗口并重新绘制从右下角到鼠标的直线,不断更新直线,以保持从一个点到鼠标位置的连接。这是不可行的,而且是资源密集型的。然而,现在我遇到了Shape.addline和Shape.move。但我不太确定它们是如何工作的,根据我的理解,一个形状可以通过以下方式拥有自己的名称: [Shapename] = Shapes.addline(positions) 然后可以使用以下方法移

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

[Shapename] = Shapes.addline(positions)
然后可以使用以下方法移动该形状:

Shapes.move(Shapename,Coordinates)
就我而言,它是:

L1 = Shapes.AddLine(0,GraphicsWindow.Height,GraphicsWindow.MouseX,GraphicsWindow.MouseY)
从左下角到鼠标位置绘制一条线

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

夏皮奈

X

Y

但是,在绘制lineshapes.AddLine时,我使用了4个参数:

X1

Y1

X2

Y2


这意味着我只能控制这两个位置。那么,你如何控制另外两个呢?如果我们只能修改X1和Y1,是否有任何方法仍然使用至少与shape.move方法类似的东西,但能够控制其他X2和Y2位置?首先,我只想改变X2和Y2的位置,因为我试图使一条线从一个点开始并停留在那里,然后改变相反的点,使其跟随鼠标,而不是移动整个形状。如果这些都不可能,是否有任何已知的方法可以只移动/更改直线的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扩展。它有一个MoveLinex1,y1,x2,y2函数。

我猜你会改变程序的结尾,它说math.cosmouseagle将200改为0,将其他200改为底部。因此,如果我想弄清楚的是,你想让线只投射在cortesian平面的第一象限中是吗?

太棒了,这完全解决了我想要实现的目标,但是,还有一件事,我如何让它出现在屏幕的左下角,我修改了addline并移动到我认为会使其位于左下角的位置,但它离左侧大约有150像素?
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