Как получить DateDiff-значение в миллисекундах в VBA (Excel)?

Сначала вы должны добавить слои к вашим объектам. Простой пример - добавить слой «TileBase» или «Tile» в ваши объекты TileBase.

Затем вы можете позволить своему Игроку сталкиваться только с определенными вещами, а НЕ с вашей картой тайлов. Смотрите матрицу столкновений для этого.

Затем измените свой код следующим образом:

void OnCollisionEnter2D(Collision2D col)
{
    var tilebase = col.GetComponent<TileBass>();
    if (tilebase != null)
    {
        Debug.Log(tilebase.gameObject.name);
    }
}
20
задан lfrandom 6 August 2013 в 20:31
поделиться

5 ответов

Вы можете использовать метод, описанный здесь следующим образом: -

Создайте новый модуль класса с именем StopWatch Поместите следующий код в модуль класса StopWatch :

Private mlngStart As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub StartTimer()
    mlngStart = GetTickCount
End Sub

Public Function EndTimer() As Long
    EndTimer = (GetTickCount - mlngStart)
End Function

Вы используете следующий код:

Dim sw as StopWatch
Set sw = New StopWatch
sw.StartTimer

' Do whatever you want to time here

Debug.Print "That took: " & sw.EndTimer & "milliseconds"

Другие методы описывают использование функции таймера VBA, но с точностью до одной сотой секунды ( сантисекунды).

44
ответ дан 29 November 2019 в 23:04
поделиться

Если Timer() точность достаточно затем, можно просто создать метку времени путем объединения даты и времени с миллисекундами:

Function Now2() As Date

    Now2 = Date + CDate(Timer / 86400)

End Function

Для вычисления различия между двумя метками времени в миллисекундах можно вычесть их:

Sub test()

    Dim start As Date
    Dim finish As Date
    Dim i As Long

    start = Now2
    For i = 0 To 100000000
    Next
    finish = Now2
    Debug.Print (finish - start) & " days"
    Debug.Print (finish - start) * 86400 & " sec"
    Debug.Print (finish - start) * 86400 * 1000 & " msec"

End Sub

Фактическая точность того метода составляет приблизительно 8 мс (BTW GetTickCount еще хуже - 16 мс) для меня.

0
ответ дан 29 November 2019 в 23:04
поделиться

Помимо метода, описанного Адамом Ральфом ( GetTickCount () ), вы можете сделать это:

-1
ответ дан 29 November 2019 в 23:04
поделиться

Если вам просто нужно время в центсекундах, вам не нужен TickCount API. Вы можете просто использовать метод VBA.Timer, который присутствует во всех продуктах Office.

Public Sub TestHarness()
    Dim fTimeStart As Single
    Dim fTimeEnd As Single
    fTimeStart = Timer
    SomeProcedure
    fTimeEnd = Timer
    Debug.Print Format$((fTimeEnd - fTimeStart) * 100!, "0.00 "" Centiseconds Elapsed""")
End Sub

Public Sub SomeProcedure()
    Dim i As Long, r As Double
    For i = 0& To 10000000
        r = Rnd
    Next
End Sub
11
ответ дан 29 November 2019 в 23:04
поделиться

GetTickCount и Performance Counter необходимы, если вы хотите уйти на микросекунды .. Для миллисекунд вы можете просто использовать что-нибудь вроде этого ..

'at the bigining of the module
Private Type SYSTEMTIME  
        wYear As Integer  
        wMonth As Integer  
        wDayOfWeek As Integer  
        wDay As Integer  
        wHour As Integer  
        wMinute As Integer  
        wSecond As Integer  
        wMilliseconds As Integer  
End Type  

Private Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)  


'In the Function where you need find diff
Dim sSysTime As SYSTEMTIME
Dim iStartSec As Long, iCurrentSec As Long    

GetLocalTime sSysTime
iStartSec = CLng(sSysTime.wSecond) * 1000 + sSysTime.wMilliseconds
'do your stuff spending few milliseconds
GetLocalTime sSysTime ' get the new time
iCurrentSec=CLng(sSysTime.wSecond) * 1000 + sSysTime.wMilliseconds
'Different between iStartSec and iCurrentSec will give you diff in MilliSecs
1
ответ дан 29 November 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: