C# 将对象推离另一个对象
我试图每秒调用一个方法20次,将点a从点B推开。 该方法应使用以下变量:C# 将对象推离另一个对象,c#,.net,vb.net,vector,2d,C#,.net,Vb.net,Vector,2d,我试图每秒调用一个方法20次,将点a从点B推开。 该方法应使用以下变量: A点(X) A(Y)点 B点(X) B点(Y) 力量 点A和点B在一起越近,它们彼此之间的移动速度就越快。 强度变量控制每个刻度的距离以及点A不再被推的点之间的距离 基本上,我试图慢慢地将光标推离指定点 有什么想法我可以实现这一点吗 这是我的尝试,不幸的是,如果距离增加,光标移动得更快 'PosX and PosY are the percentage of the screen width/height
- A点(X)
- A(Y)点
- B点(X)
- B点(Y)
- 力量
'PosX and PosY are the percentage of the screen width/height
'Calculate the real position
Dim ScreenPosX As Integer = Screen.PrimaryScreen.WorkingArea.Width * (PosX / 100)
Dim ScreenPosY As Integer = Screen.PrimaryScreen.WorkingArea.Height * (PosY / 100)
Dim PointOffsetX As Integer = Cursor.Position.X - ScreenPosX
Dim PointOffsetY As Integer = Cursor.Position.Y - ScreenPosY
If PointOffsetX > -Strength And PointOffsetX < Strength Then
Dim StrengthFactorX As Integer = Strength - ScreenOffsetX
Dim StrengthFactorY As Integer = Strength - ScreenOffsetY
Cursor.Position = New Point(Cursor.Position.X + StrengthFactorX, Cursor.Position.Y + StrengthFactorY)
'Would be the same for Y. Obviously doesn't work though.
End If
”PosX和PosY是屏幕宽度/高度的百分比
计算实际位置
Dim SCREENSPOSX为整数=Screen.PrimaryScreen.WorkingArea.Width*(PosX/100)
Dim ScreenPosY作为整数=Screen.PrimaryScreen.WorkingArea.Height*(PosY/100)
Dim PointOffsetX作为整数=Cursor.Position.X-ScreenPosX
Dim PointOffsetY作为整数=Cursor.Position.Y-ScreenPosY
如果PointOffsetX>-Strength和PointOffsetX
这个代码对我很有用。我使用了一个按钮和计时器来点击事件。你可以调整常数
Dim currentObjectAccelerationX As Decimal = 0
Dim currentObjectAccelerationY As Decimal = 0
Dim currentObjectPointX As Decimal
Dim currentObjectPointY As Decimal
Const maxDistance As Integer = 50
Const accelerationDenominator As Integer = 50
Const deceleration As Decimal = 0.2
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
currentObjectPointX = Button1.Location.X
currentObjectPointY = Button1.Location.Y
Timer1.Start()
End Sub
Private Sub onTick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Dim MousePointX As Integer = Me.PointToClient(Cursor.Position).X
Dim MousePointY As Integer = Me.PointToClient(Cursor.Position).Y
Dim OffsetX As Decimal = currentObjectPointX - MousePointX
Dim OffsetY As Decimal = currentObjectPointY - MousePointY
If Math.Abs(OffsetX) < maxDistance AndAlso Math.Abs(OffsetY) < maxDistance Then
Dim accelerationX As Decimal = 0
Dim accelerationY As Decimal = 0
If OffsetX > 0 Then
accelerationX = 1 + (maxDistance - OffsetX) / accelerationDenominator
Else
accelerationX = -1 + (-maxDistance - OffsetX) / accelerationDenominator
End If
If OffsetY > 0 Then
accelerationY = 1 + (maxDistance - OffsetY) / accelerationDenominator
Else
accelerationY = -1 + (-maxDistance - OffsetY) / accelerationDenominator
End If
currentObjectAccelerationX += accelerationX
currentObjectAccelerationY += accelerationY
End If
currentObjectPointX += currentObjectAccelerationX
currentObjectPointY += currentObjectAccelerationY
If (Math.Abs(currentObjectAccelerationX) <= deceleration) Then
currentObjectAccelerationX = 0
ElseIf (currentObjectAccelerationX > deceleration) Then
currentObjectAccelerationX -= deceleration
ElseIf (currentObjectAccelerationX < deceleration) Then
currentObjectAccelerationX += deceleration
End If
If (Math.Abs(currentObjectAccelerationY) <= deceleration) Then
currentObjectAccelerationY = 0
ElseIf (currentObjectAccelerationY > deceleration) Then
currentObjectAccelerationY -= deceleration
ElseIf (currentObjectAccelerationY < deceleration) Then
currentObjectAccelerationY += deceleration
End If
Button1.Location = New Point(currentObjectPointX, currentObjectPointY)
End Sub
Dim currentObjectAccelerationX作为十进制=0
Dim currentObjectAccelerationY为十进制=0
将currentObjectPointX设置为十进制
Dim currentObjectPointY作为十进制
常量maxDistance为整数=50
常数加速度分母为整数=50
恒减速度(十进制=0.2)
公共分新()
'设计器需要此调用。
初始化组件()
'在InitializeComponent()调用之后添加任何初始化。
currentObjectPointX=按钮1.Location.X
currentObjectPointY=按钮1.Location.Y
Timer1.Start()
端接头
私有子控件(发送方作为System.Object,e作为System.EventArgs)处理Timer1.Tick
Dim MousePointX作为整数=Me.PointToClient(Cursor.Position).X
Dim MousePointY As Integer=Me.PointToClient(Cursor.Position).Y
Dim OffsetX为十进制=currentObjectPointX-鼠标点X
Dim OffsetY As Decimal=currentObjectPointY-MousePointY
如果Math.Abs(OffsetX)0,则
加速度x=1+(最大距离-偏移量x)/加速度分母
其他的
加速度x=-1+(-maxDistance-OffsetX)/加速度分母
如果结束
如果偏移量>0,则
加速度Y=1+(最大距离-偏移量)/加速度分母
其他的
accelerationY=-1+(-maxDistance-OffsetY)/accelerationDenominator
如果结束
currentObjectAccelerationX+=accelerationX
currentObjectAccelerationY+=加速度Y
如果结束
currentObjectPointX+=currentObjectAccelerationX
currentObjectPointY+=currentObjectAccelerationY
如果(Math.Abs(currentObjectAccelerationX)减速),则
currentObjectAccelerationX-=减速
ElseIf(currentObjectAccelerationX<减速),然后
currentObjectAccelerationX+=减速
如果结束
如果(数学Abs(currentObjectAccelerationY)减速),则
currentObjectAccelerationY-=减速
ElseIf(currentObjectAccelerationY<减速),然后
currentObjectAccelerationY+=减速
如果结束
Button1.Location=新点(currentObjectPointX,currentObjectPointY)
端接头
这个代码对我很有用。我使用了一个按钮和计时器来点击事件。你可以调整常数
Dim currentObjectAccelerationX As Decimal = 0
Dim currentObjectAccelerationY As Decimal = 0
Dim currentObjectPointX As Decimal
Dim currentObjectPointY As Decimal
Const maxDistance As Integer = 50
Const accelerationDenominator As Integer = 50
Const deceleration As Decimal = 0.2
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
currentObjectPointX = Button1.Location.X
currentObjectPointY = Button1.Location.Y
Timer1.Start()
End Sub
Private Sub onTick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Dim MousePointX As Integer = Me.PointToClient(Cursor.Position).X
Dim MousePointY As Integer = Me.PointToClient(Cursor.Position).Y
Dim OffsetX As Decimal = currentObjectPointX - MousePointX
Dim OffsetY As Decimal = currentObjectPointY - MousePointY
If Math.Abs(OffsetX) < maxDistance AndAlso Math.Abs(OffsetY) < maxDistance Then
Dim accelerationX As Decimal = 0
Dim accelerationY As Decimal = 0
If OffsetX > 0 Then
accelerationX = 1 + (maxDistance - OffsetX) / accelerationDenominator
Else
accelerationX = -1 + (-maxDistance - OffsetX) / accelerationDenominator
End If
If OffsetY > 0 Then
accelerationY = 1 + (maxDistance - OffsetY) / accelerationDenominator
Else
accelerationY = -1 + (-maxDistance - OffsetY) / accelerationDenominator
End If
currentObjectAccelerationX += accelerationX
currentObjectAccelerationY += accelerationY
End If
currentObjectPointX += currentObjectAccelerationX
currentObjectPointY += currentObjectAccelerationY
If (Math.Abs(currentObjectAccelerationX) <= deceleration) Then
currentObjectAccelerationX = 0
ElseIf (currentObjectAccelerationX > deceleration) Then
currentObjectAccelerationX -= deceleration
ElseIf (currentObjectAccelerationX < deceleration) Then
currentObjectAccelerationX += deceleration
End If
If (Math.Abs(currentObjectAccelerationY) <= deceleration) Then
currentObjectAccelerationY = 0
ElseIf (currentObjectAccelerationY > deceleration) Then
currentObjectAccelerationY -= deceleration
ElseIf (currentObjectAccelerationY < deceleration) Then
currentObjectAccelerationY += deceleration
End If
Button1.Location = New Point(currentObjectPointX, currentObjectPointY)
End Sub
Dim currentObjectAccelerationX作为十进制=0
Dim currentObjectAccelerationY为十进制=0
将currentObjectPointX设置为十进制
Dim currentObjectPointY作为十进制
常量maxDistance为整数=50
常数加速度分母为整数=50
恒减速度(十进制=0.2)
公共分新()
'设计器需要此调用。
初始化组件()
'在InitializeComponent()调用之后添加任何初始化。
currentObjectPointX=按钮1.Location.X
currentObjectPointY=按钮1.Location.Y
Timer1.Start()
端接头
私有子控件(发送方作为System.Object,e作为System.EventArgs)处理Timer1.Tick
Dim MousePointX作为整数=Me.PointToClient(Cursor.Position).X
Dim MousePointY As Integer=Me.PointToClient(Cursor.Position).Y
Dim OffsetX为十进制=currentObjectPointX-鼠标点X
Dim OffsetY As Decimal=currentObjectPointY-MousePointY
如果Math.Abs(OffsetX)0,则
加速度x=1+(最大距离-偏移量x)/加速度分母
其他的
加速度x=-1+(-maxDistance-OffsetX)/加速度分母
如果结束
如果偏移量>0,则
加速度Y=1+(最大距离-偏移量)/加速度分母
其他的
accelerationY=-1+(-maxDistance-OffsetY)/accelerationDenominator
如果结束
currentObjectAccelerationX+=accelerationX
currentObjectAccelerationY+=加速度Y
如果结束
currentObjectPointX+=currentObjectAccelerationX
currentObjectPointY+=currentObjectAccelerationY
如果(Math.Abs(currentObjectAccelerationX)减速),则
currentObjectAccelerationX-=减速
ElseIf(currentObjectAccelerationX<减速),然后
当前对象加速