我正试着让笔记飞过屏幕。音符将是节拍的1/16,并且BPM可以设置为任何正整数。
现在,我的等式为distance(in pixels) * (BPM / 60s) * deltaTime
,其中deltaTime是帧之间的时间。在纸面上,这是有道理的。但是,当我运行应用程序时,笔记飞得太慢。假设10 BPM
和deltaTime
平均值为0.06255s
且距离为750px
,则750px * (10BPM/60s) * 0.06255s
表示我应该~8px
一帧(@ 60FPS) ,所以1秒后我应该470px
旅行。
20
秒后,备注仅展开250px
!
计算帧间时间的代码
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
deltaBeatTime += currentTime - previousFrameTime;
CFTimeInterval deltaTime = currentTime - previousFrameTime;
previousFrameTime = currentTime;
myLabel.text = [NSString stringWithFormat:@"%f", deltaBeatTime];
[beat moveBeat:deltaTime];
}
根据BPM
移动节拍-(void) moveBeat:(float)timeInterval
{
float spaceMoved = (container.getBeatSpeed / 60.0f) * (750.0f) * (timeInterval);
pixels += spaceMoved;
dt += timeInterval;
NSLog(@"%f in %f", pixels, dt);
[self setPosition:CGPointMake(self.position.x - spaceMoved, self.position.y)];
}
我的等式是否存在错误,或者我忘记按某种因素进行缩放?