小编who*_*ops的帖子

测量联网设备之间的时差

我正在为我制作的游戏添加网络多人游戏.当服务器向客户端发送更新数据包时,我会包含一个时间戳,以便客户端确切知道该信息何时有效.但是,服务器计算机和客户端计算机的时钟可能设置为不同的时间(甚至可能只有几秒钟的差异),因此服务器的时间戳需要转换为客户端的本地时间.

所以,我想知道计算服务器和客户端之间时差的最佳方法.当前,客户端在初始化期间对服务器执行时间戳记录,记录请求何时被发送以及何时被应答,并且猜测时间戳大致在旅程的中途生成.客户还运行其中10个试验并取平均值.

但是,问题是我在重复运行程序时会得到不同的结果.在每组10中,每次测量很少发生超过400毫秒的偏差,这可能是可以接受的.但是如果我在程序的每次运行之间等待几分钟,那么得到的平均值可能不同意多达2秒,这是不可接受的.

有没有更好的方法来确定两个联网设备的时钟之间的差异?或者至少有一种方法来调整我的算法以产生更准确的结果?

可能相关或不相关的详细信息:这些设备是通过蓝牙进行通信的iPod Touch.我测量的ping是50-200毫秒.我不能要求用户同步他们的时钟.:)


更新:在下面的答案的帮助下,我写了一个objective-c类来处理这个问题.我在我的博客上发布了它:http://scooops.blogspot.com/2010/09/timesync-was-time-sink.html

networking

14
推荐指数
1
解决办法
6691
查看次数

混合大型四核的性能受到影响

我有一个在视网膜显示器上运行得很好(55-60fps)的游戏.我想添加一个与现有场景融合的全屏叠加层.然而,即使使用小的纹理,性能也很大.我可以进行优化以使其可用吗?

如果我使用80x120纹理(纹理是动态渲染,这就是为什么它不是正方形),我得到25-30FPS.如果我使纹理变小,性能会提高,但质量是不可接受的.但一般来说,叠加的质量不是很重要(它只是照明).

渲染器利用率为99%.

即使我使用文件(.png)中的方形纹理,性能也很糟糕.

这是我创建纹理的方式:

    [EAGLContext setCurrentContext:context];

    // Create default framebuffer object.
    glGenFramebuffers(1, &lightFramebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, lightFramebuffer);

    // Create color render buffer and allocate backing store.
    glGenRenderbuffers(1, &lightRenderbuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, lightRenderbuffer);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8_OES, LIGHT_WIDTH, LIGHT_HEIGHT);

    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, lightRenderbuffer);

    glGenTextures(1, &lightImage);
    glBindTexture(GL_TEXTURE_2D, lightImage);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, LIGHT_WIDTH, LIGHT_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, lightImage, 0);
Run Code Online (Sandbox Code Playgroud)

这是渲染......

/* Draw scene... */

glBlendFunc(GL_ONE, GL_ONE);


//Switch to offscreen texture buffer
glBindFramebuffer(GL_FRAMEBUFFER, …
Run Code Online (Sandbox Code Playgroud)

iphone opengl-es ios

9
推荐指数
1
解决办法
1488
查看次数

标签 统计

ios ×1

iphone ×1

networking ×1

opengl-es ×1