Objective c 不应该';这不就是以秒为单位的当前日期/时间吗?

Objective c 不应该';这不就是以秒为单位的当前日期/时间吗?,objective-c,nsdate,nstimeinterval,Objective C,Nsdate,Nstimeinterval,我想基于当前时间(以秒为单位)计算一个振荡偏移量值,以便任何对象都可以调用此方法,并将返回的偏移量与调用相同方法的任何其他对象同步 这是locationOffset属性的设置程序: - (float)locationOffset { float currentTime = [[NSDate date] timeIntervalSince1970]; locationOffset = sinf(currentTime); CCLOG(@"--- current time =

我想基于当前时间(以秒为单位)计算一个振荡偏移量值,以便任何对象都可以调用此方法,并将返回的偏移量与调用相同方法的任何其他对象同步

这是locationOffset属性的设置程序:

- (float)locationOffset
{
    float currentTime = [[NSDate date] timeIntervalSince1970];
    locationOffset = sinf(currentTime);
    CCLOG(@"--- current time = %1.9f, location offset = %1.1f", currentTime, locationOffset);

    return locationOffset;
}
我称之为60Hz,输出如下:

--- current time = 1316013568.000000000, location offset = -0.1
…而且一直是这样。小数点后的所有值都应该为零吗

我希望我可以通过缩放currentTime来调整频率,通过缩放offsett来调整“波长”,但我只需要让我的正弦位置Offset根据时间来回摆动

似乎位置偏移应该每2pi秒从-1循环到1

编辑:添加现在可以正常工作的方法

- (float)locationOffset
{
    double currentTime = [[NSDate date] timeIntervalSinceReferenceDate];
    locationOffset = sin(2.0f*currentTime) * 12.0f;
//    CCLOG(@"--- current time = %1.9f, location offset = %1.1f", currentTime, locationOffset);

    return locationOffset;
}

它每pi秒循环一次,大小为+/-12。

是的,您的问题是
浮点值只有大约7位有效数字。您甚至没有足够的精度来正确表示整数值1316013568,因此您一次又一次地将相同的值输入到
sinf
。坚持使用
double
值,并使用双精度
sin
函数,或者在转换为float之前将数字缩放到小于6个整数的值。

如何调用该方法?它应该可以正常工作,即使您应该使用正确的类型(
NSTimeInterval
),因为您正在丢失精度(
NSTimeInterval
映射到
double
)。如果它处于正确的状态(或那里的标题),它将调用它并将偏移量添加到它的位置。在CCLayer的-update方法中,这个(潜在的)调用每秒可能发生60次。您是否向我们展示了整个函数??(根据我的计算,该日期代表1974年的某个时间)。[Oops-一定滑了一个数字-它是2011年的一个日期。]对于grins,请尝试使用TimeIntervalenceReferenceDate。我想知道timeIntervalSince1970是否被限制为整数秒。谢谢Daniel,我已经更新了问题以包含答案。