游戏开发论坛

 找回密码
 立即注册
搜索
查看: 11529|回复: 36

有没人在双核处理器的电脑开发过游戏作品(问题研究)

[复制链接]

270

主题

6442

帖子

6446

积分

论坛元老

Rank: 8Rank: 8

积分
6446
发表于 2007-5-11 22:06:00 | 显示全部楼层 |阅读模式
我说的是游戏作品,简单的计算例子不算,因为程序太简单试不出来。

想问下双核和单核处理器下一些程序的区别。
我在开发游戏里出现了双核和单核CPU速度兼容的问题,现在用自己的方法解决,但我
这里没有双核的机器测试。游戏里的时钟是锁了的,就是在性能差不多的电脑上速度都一样,
在多台单核处理器电脑上运行一切正常,PIII-PIV都试过了。
游戏程序都是用精确时钟API或函数控制,但程序到了双核机上某些代码速度和功能被加快了!
问题出现带DO....LOOP的循环里,但是用TIMER的无论双核单核都是正常的。

在不少新游戏里我发觉有32和64位不同的执行文件,比如帝国时代3,就是说双核和单核是有区别的,
现在双核时代来临了,我想要考虑这个问题了。

会不会双核的时钟和单核的设计的不同?不知道在双核开发过游戏的朋友有没发现什么问题?请指教!

32

主题

228

帖子

228

积分

中级会员

Rank: 3Rank: 3

积分
228
发表于 2007-5-12 01:29:00 | 显示全部楼层

Re: 有没人在双核处理器的电脑开发过游戏作品(问题研究

游戏之家站长: 有没人在双核处理器的电脑开发过游戏作品(问题研究)
在不少新游戏里我发觉有32和64位不同的执行文件,比如帝国时代3,就是说双核和单核是有区别的,

好像不成逻辑关系吧。
我问几个菜鸟问题:
  几个核同时用sleep()会产生互斥否?
  程序的时间计数是用主板芯片的还是整个cup的还是各自核里的。

270

主题

6442

帖子

6446

积分

论坛元老

Rank: 8Rank: 8

积分
6446
发表于 2007-5-12 09:03:00 | 显示全部楼层

Re:有没人在双核处理器的电脑开发过游戏作品(问题研究)

我说的和你的问题无关,我也是用以下程序控制时钟的
Public Declare Function GetTickCount Lib "kernel32" () As Long
我用VB6写游戏,用TIMER控件里做主循环一切都正常,用DO....loop做主循环问题来了,
我的游戏在单核电脑上FSP不超过100,但是到了双核处理器上当FSP超过200的时候有些时钟被加快了,

很多理论一定要在双核上实践过才知道,否则很多新的商业游戏为什么有双核64和单核32选项,难道是双核上运行的游戏有其他功能?我估计就是重新调整了时钟。

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2007-5-12 09:06:00 | 显示全部楼层

Re:有没人在双核处理器的电脑开发过游戏作品(问题研究)

游戏程序都是用精确时钟API或函数控制,但程序到了双核机上某些代码速度和功能被加快了!
问题出现带DO....LOOP的循环里,

跟你说了要限制游戏速度。

比如A机器是386

DO

POSX = POSX + T

LOO

另台机器是 Pentiume4 Core 2
DO

POSX = POSX + T

LOOP


难道上面两个一样的代码,都运行一秒钟, POSX移动的距离是一样的吗?
显然CORE2的POSX要大的多。
如果你把POSX来控制一个人的坐标,是不是那个人在CORE2上跑的飞快呢。

显然两个同样的代码,在不同机器上跑的速度是不一样的。

你问的根本不是什么问题,你只要GOOGLE一下 “限制游戏速度”,就可以找到答案。



一般是带时间的积分量进去,作为移动补偿的系数。
就是说你要统计 上一贞渲染所消耗的秒数, 其实就是 E = 1/FPS

然后在移动代码里面所有相加的步长都是E的倍数
比如上面
POSX=POSX+T
你改成
POSX=POSX+T*E

这时候T可以放大一点以满足要求, T现在的意义就是,每秒移动的距离。


如果你还看不懂,只能说你原始时代还没有结束。

270

主题

6442

帖子

6446

积分

论坛元老

Rank: 8Rank: 8

积分
6446
发表于 2007-5-12 10:55:00 | 显示全部楼层

Re:有没人在双核处理器的电脑开发过游戏作品(问题研究)

最早你说的在所有电脑上速度一样的理论我接受,就是时间补偿,其实游戏到了386,486也不一定能运行,只能用来说明理论,比如你的地球风暴,换个没3D加速的显示卡电脑就没办法跑了, 1FPS。

如果你说的那些我不懂我就不用开发游戏了,不知道你究竟有没看过我写的游戏代码和例子,时间补偿函数肯定有。

在PIV 和 486上运行下面代码,前者要快的多。
DO
A = A + 1
LOOP

在PIV 和 486上运行下面代码,速度基本一样
DO
A = A + 时间补偿函数 * N
LOOP

------------------------------------------------
现在问题是,有些数值已经超出了精度的管理范围,原因是N已经等于0.000001,
当N = 0.000001或更小,在双核处理器上不正常。
某些情况下N我都觉得太大了,因此不能再小了,但有一点不明,就是用TIMER做主循环不存在双核和单核的区别。

其实只是探讨一下,大不了不用DO LOOP,反正现在电脑速度那么快。
当你的游戏做大了有点规模的时候会发现很多问题,所以要研究,以前在做
五星1代的时候我根本不考虑这些,但奇怪的是游戏在双核电脑上运行正常。




180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2007-5-12 12:20:00 | 显示全部楼层

Re:有没人在双核处理器的电脑开发过游戏作品(问题研究)

GetTickCount
好象在 NT 系统上得到的时间差的精确读是 56毫秒 。

7

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2007-5-12 12:22:00 | 显示全部楼层

Re:有没人在双核处理器的电脑开发过游戏作品(问题研究)

我想锁定FPS就OK了

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2007-5-12 15:52:00 | 显示全部楼层

Re:有没人在双核处理器的电脑开发过游戏作品(问题研究)

游戏之家站长: 有没人用双核处理器的电脑开发过游戏作品(问题研究)


我说的是游戏作品,简单的计算例子不算,因为程序太简单试不出来。

想问下双核和单核处理器下一些程序的区别。
我在开发游戏里出现了双核和单核CPU速度兼容的问题,现在用自己的方法解决,但我
这里没有双核的机器测试。游戏里的时钟是锁了的,就是在性能差不多的电脑上速度都一样,
在多台单核处理器电脑上运行一切正常,PIII-PIV都试过了。
游戏程序都是用精确时钟API或函数控制,但程序到了双核机上某些代码速度和功能被加快了!
问题出现带DO....LOOP的循环里,但是用TIMER的无论双核单核都是正常的。

在不少新游戏里我发觉有32和64位不同的执行文件,比如帝国时代3,就是说双核和单核是有区别的,
现在双核时代来临了,我想要考虑这个问题了。

会不会双核的时钟和单核的设计的不同?不知道在双核开发过游戏的朋友有没发现什么问题?请指教!


貌似你问的问题和双核CPU没有一点关系。

关于游戏速度控制,那只和CPU速度有关,关于32位和64位,那也和CPU的指令集有关,都和单双核没关系。

最好先把单双核的区别搞清楚。

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2007-5-12 16:35:00 | 显示全部楼层

Re:有没人在双核处理器的电脑开发过游戏作品(问题研究)

做DSHOW的参考时钟的时候,都是用QueryPerformanceFrequncy

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2007-5-12 16:43:00 | 显示全部楼层

Re:有没人在双核处理器的电脑开发过游戏作品(问题研究)

确实楼上的方法精度更高。
不过没有Int64之类的变量类型处理它还真不方便的。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 08:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表