史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2005-11-03, 11:45 AM   #1 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:99 | 在線時長:10198小時 | 升級還需:202小時級別:99 | 在線時長:10198小時 | 升級還需:202小時級別:99 | 在線時長:10198小時 | 升級還需:202小時級別:99 | 在線時長:10198小時 | 升級還需:202小時級別:99 | 在線時長:10198小時 | 升級還需:202小時級別:99 | 在線時長:10198小時 | 升級還需:202小時級別:99 | 在線時長:10198小時 | 升級還需:202小時級別:99 | 在線時長:10198小時 | 升級還需:202小時級別:99 | 在線時長:10198小時 | 升級還需:202小時
註冊日期: 2002-12-07
文章: 13522
精華: 0
現金: 26929 金幣
資產: 3024859 金幣
預設

幫你改了一下
請自行加一個 Shape物件
程式是先跑水平再跑垂直

語法:
Dim XEnd, YEnd As Integer
Dim ShapeSpeedX, ShapeSpeedY As Integer 'X Y 移動值可配合方向指標做 ShapeSpeedX=-ShapeSpeedX 變化
Dim OverX, OverY As Boolean
'Dim Direction(1 To 4) As Boolean '方向指標: **請配合障礙判斷式使用**

Private Sub Form_Load()

    Form1.AutoRedraw = True
    Timer1.Interval = 100
    XEnd = 0
    YEnd = 0

End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

    If XEnd = 0 And YEnd = 0 Then
        XEnd = X
        YEnd = Y
        OverX = False
        OverY = False
        
        ShapeSpeedX = InputBox("請輸入移動速度", "老鼠移動速度", Shape1.Width / 2)
        ShapeSpeedY = ShapeSpeedX
        If XEnd < Shape1.Left Then ShapeSpeedX = -ShapeSpeedX
        If YEnd < Shape1.Top Then ShapeSpeedY = -ShapeSpeedY
        
        Form1.DrawWidth = 3
        Me.PSet (XEnd, YEnd)
        Me.Print "  <=終點"
        Form1.DrawWidth = 1
        
        Timer1.Enabled = True
        Exit Sub
    End If

    If Button = 2 Then
        Timer1.Enabled = False
        Me.Cls
        XEnd = 0
        YEnd = 0
    End If

End Sub

'移動 Shape1
Private Sub Timer1_Timer()
Dim XOld, YOld As Integer '未移動前座標
Dim NewPosX, NewPosY As Integer '預測用

    XOld = Shape1.Left + Shape1.Width / 2
    YOld = Shape1.Top + Shape1.Height / 2
    
    '**請加上遇到障礙時的判斷式**
    If Not OverX Then
        NewPosX = Shape1.Left + ShapeSpeedX                             '新的位址
        If ShapeSpeedX > 0 Then If NewPosX >= XEnd Then OverX = True    '水平移動終止條件
        If Not OverX Then Shape1.Left = NewPosX                         '移動
        If ShapeSpeedX < 0 Then If NewPosX <= XEnd Then OverX = True    '水平移動終止條件
        
        '畫出水平移動軌跡
        Line (XOld, Shape1.Top + Shape1.Height / 2)-(Shape1.Left + Shape1.Width / 2, Shape1.Top + Shape1.Height / 2)
        Exit Sub '**請配合障礙判斷式修改**
    End If
    
    '**請加上遇到障礙時的判斷式**
    If Not OverY Then
        NewPosY = Shape1.Top + ShapeSpeedY                              '新的位址
        If ShapeSpeedY > 0 Then If NewPosY >= YEnd Then OverY = True    '垂直移動終止條件
        If Not OverY Then Shape1.Top = NewPosY                          '移動
        If ShapeSpeedY < 0 Then If NewPosY <= YEnd Then OverY = True    '垂直移動終止條件
        
        '畫出垂直移動軌跡
        Line (Shape1.Left + Shape1.Width / 2, YOld)-(Shape1.Left + Shape1.Width / 2, Shape1.Top + Shape1.Height / 2)
        Exit Sub '**請配合障礙判斷式修改**
    End If
    
    '到達後停止
    Timer1.Enabled = False

End Sub
mini 目前離線  
送花文章: 2060, 收花文章: 8083 篇, 收花: 26939 次
回覆時引用此帖
舊 2005-11-03, 12:59 PM   #2 (permalink)
註冊會員
 
rockman132 的頭像
榮譽勳章
UID - 93994
在線等級: 級別:15 | 在線時長:295小時 | 升級還需:25小時級別:15 | 在線時長:295小時 | 升級還需:25小時級別:15 | 在線時長:295小時 | 升級還需:25小時級別:15 | 在線時長:295小時 | 升級還需:25小時級別:15 | 在線時長:295小時 | 升級還需:25小時
註冊日期: 2003-08-24
VIP期限: 2010-09
住址: 遙遠的拉拉山....
文章: 1267
精華: 0
現金: -46 金幣
資產: 8784536 金幣
預設

引用:
作者: mini
幫你改了一下
請自行奶竷郎A跑垂直


Dim XEnd, YEnd As Integer
Dim ShapeSpeedX, ShapeSpeedY As Integer 'X Y 移動值可配合方向指標做 ShapeSpeedX=-ShapeSpeedX 變化
Dim OverX, OverY As Boolean
'Dim Direction(1 To 4) As Boolean '方向指標: **請配合障礙判斷式使用**

Private Sub Form_Load()

Form1.AutoRedraw = True
Timer1.Interval = 100
XEnd = 0
YEnd = 0

End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If XEnd = 0 And YEnd = 0 Then
XEnd = X
YEnd = Y
OverX = False
OverY = False

ShapeSpeedX = InputBox("請輸入移動速度", "老鼠移動速度", Shape1.Width / 2)
ShapeSpeedY = ShapeSpeedX
If XEnd < Shape1.Left Then ShapeSpeedX = -ShapeSpeedX
If YEnd < Shape1.Top Then ShapeSpeedY = -ShapeSpeedY

Form1.DrawWidth = 3
Me.PSet (XEnd, YEnd)
Me.Print " <=終點"
Form1.DrawWidth = 1

Timer1.Enabled = True
Exit Sub
End If

If Button = 2 Then
Timer1.Enabled = False
Me.Cls
XEnd = 0
YEnd = 0
End If

End Sub

'移動 Shape1
Private Sub Timer1_Timer()
Dim XOld, YOld As Integer '未移動前座標
Dim NewPosX, NewPosY As Integer '預測用

XOld = Shape1.Left + Shape1.Width / 2
YOld = Shape1.Top + Shape1.Height / 2

'**請加上遇到障礙時的判斷式**
If Not OverX Then
NewPosX = Shape1.Left + ShapeSpeedX '新的位址
If ShapeSpeedX > 0 Then If NewPosX >= XEnd Then OverX = True '水平移動終止條件
If Not OverX Then Shape1.Left = NewPosX '移動
If ShapeSpeedX < 0 Then If NewPosX <= XEnd Then OverX = True '水平移動終止條件

'畫出水平移動軌跡
Line (XOld, Shape1.Top + Shape1.Height / 2)-(Shape1.Left + Shape1.Width / 2, Shape1.Top + Shape1.Height / 2)
Exit Sub '**請配合障礙判斷式修改**
End If

'**請加上遇到障礙時的判斷式**
If Not OverY Then
NewPosY = Shape1.Top + ShapeSpeedY '新的位址
If ShapeSpeedY > 0 Then If NewPosY >= YEnd Then OverY = True '垂直移動終止條件
If Not OverY Then Shape1.Top = NewPosY '移動
If ShapeSpeedY < 0 Then If NewPosY <= YEnd Then OverY = True '垂直移動終止條件

'畫出垂直移動軌跡
Line (Shape1.Left + Shape1.Width / 2, YOld)-(Shape1.Left + Shape1.Width / 2, Shape1.Top + Shape1.Height / 2)
Exit Sub '**請配合障礙判斷式修改**
End If

'到達後停止
Timer1.Enabled = False

End Sub

感謝大大指點~~~但我剛執行了一下出現這樣的訊息方塊
執行階段錯誤'424':此處需要物件~~~我看不懂這句話要表達啥意思!!!
請大大解說一下喔!!!.....笑我沒關係....VB太複雜的比較需要思考
rockman132 目前離線  
送花文章: 112, 收花文章: 251 篇, 收花: 702 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 03:54 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1