나는 음악이있는 게임을 만들려고 노력해 왔습니다. 나는 프로그램의 실행 시간을 추적하기 위해 타이머를 사용했지만 프로그램의 실행 시간과 음악의 재생 시간을 일치시킬 수 없었다. 거의 모든 코드를 없애더라도 여전히 느립니다. 다음은 코드에 대한 것입니다.프로그램 시간 대 음악 시간
int timeInterval;
int runningTime;
DispatcherTimer drawTimer;
public Game()
{
timeInterval = 100;
drawTimer = new DispatcherTimer();
drawTimer.Interval = TimeSpan.FromMilliseconds(timeInterval);
drawTimer.Tick += dispatcherTimer_Tick;
}
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
runningTime = 0;
StorageFile file;
StorageFolder InstallationFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
string filePath = @"soundtrack.m4a";
musicPlayer = new MediaElement();
file = await InstallationFolder.GetFileAsync(filePath);
var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
musicPlayer.SetSource(stream, file.ContentType);
musicPlayer.Play();
drawTimer.Start();
}
void dispatcherTimer_Tick(object sender, object e)
{
runningTime += timeInterval;
if ((runningTime/1000) % 10 == 0)
{
System.Diagnostics.Debug.WriteLine("Music: " + musicPlayer.Position.Seconds + "Running time: " + (runningTime/1000) % 60);
}
}
도움 주셔서 감사합니다.
편집 : 여기에 출력
Music: 0Running time: 0
Music: 0Running time: 0
Music: 0Running time: 0
Music: 0Running time: 0
Music: 0Running time: 0
Music: 0Running time: 0
Music: 0Running time: 0
Music: 0Running time: 0
Music: 0Running time: 0
Music: 11Running time: 10
Music: 11Running time: 10
Music: 11Running time: 10
Music: 11Running time: 10
Music: 12Running time: 10
Music: 12Running time: 10
...
Music: 9Running time: 0
Music: 10Running time: 0
Music: 10Running time: 0
Music: 10Running time: 0
Music: 10Running time: 0
Music: 10Running time: 0
Music: 10Running time: 0
Music: 10Running time: 0
Music: 10Running time: 0
Music: 10Running time: 0
왜 mod 60? runtime (milliseconds)/1000을 사용하면 초 단위로 실행 시간을 얻을 수 있습니까? –
musicPlayer는 나에게 위치의 초 부분 만 제공합니다. 그래서 1:26에 나에게 26을 줄 것이다. 나는 달리기 시간에 mod 60을했다. – connor
오, 그건 의미가 있습니다. 내 추측에 따르면,'musicPlayer.Play()'는 아마도 실제로 재생되기 전에해야 할 초기화/버퍼링/로딩 등을 가지고있을 것입니다. 얼마나 뒤떨어져 있니? –