用opengl做的游戏,将程序移植到别的电脑上,速度又得重新调整,有什么好的方法解决这个问题吗?

y_chengyong 2013-05-10 04:47:09
RT。
我用opengl做了一个小游戏,语言是用c++的开发的。在我自己的电脑上调试好后,速度都弄好了,结果将程序拷到其他电脑上去,速度慢了很多,得重新再改。如果这样的话,那每次移植过去都要改很麻烦,因为我只把.exe文件给对方,对方就玩的不爽了,请教各位大神,有什么好的解决方法吗?
...全文
285 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
kestudio123 2013-05-16
  • 打赏
  • 举报
回复
引用 18 楼 y_chengyong 的回复:
[quote=引用 16 楼 kestudio123 的回复:] [quote=引用 15 楼 y_chengyong 的回复:] [quote=引用 14 楼 kestudio123 的回复:] [quote=引用 11 楼 sdhexu 的回复:] 这个问题很简单。估计你在更新游戏精灵的位置的时候,没有考虑机器运行速度的问题。有的机器可能运行30帧/秒,有的可能120帧/秒,如果你简单的进行精灵位移,则速度块的机器,精灵的移动速度也快。 修正方法如下: 方法1、为精灵设定一个速度。每次更新画面时,计算距离上次渲染逝去了多少时间,然后用时间×速度,得到本次精灵位移的位移量。这样方法是最好的,速度块的机器上,可以更细腻,速度慢的机器上,步进大,但速度是一样的。 方法2、设置恒定的渲染时间间隔。必须限定在30帧,问题是,遇到连30帧都跑不完的破机器,就会有问题。
很简单,这种游戏的方法就是最常见的游戏中的“垂直同步功能”。一句话总结:就是额定计算一定量的数据,再记录流逝时间:多于规定则直接pass,少了则睡眠规定时间差后再开始。[/quote]好深奥啊,我是初学者,现在做期末大作业,字体显示在窗口上,在别的电脑上会忽明忽暗,怎么解决呢?[/quote] 这个问题我也不好说是什么原因造成的,所以就没有回答啊。要看具体分析啊。哈哈,没有看到你的代码,关于这样猜测也不太准。你也没有说清楚你是3D游戏还是2D游戏啊。运用了怎么样的渲染[/quote] if(myplanelife<0) myplanelife=0; glColor3f(1.0f,0.0f,0.0f); glRasterPos2f(-300.0f,200.0f); glPrint("Life: %d",myplanelife); glColor3f(1.0f,0.0f,0.0f); glRasterPos2f(-winwidth/2.0f+100.0f,-winheight/2.0f+100.0f); glPrint("Score: %d",totalScore); 在nehe教程里拷贝的,渲染不知道是什么概念?[/quote] 猜测,可能是跟你的渲染速度有关。你说新的机器可能跟不上,是不是你每次完成了一次动作就了刷新分数,太频繁,所以导致刷新速度跟不上?
y_chengyong 2013-05-16
  • 打赏
  • 举报
回复
谢谢大家的帮助!
y_chengyong 2013-05-16
  • 打赏
  • 举报
回复
引用 22 楼 zhao4zhong1 的回复:
搜网络教程“学OpenGL编3D游戏”。
我做的是2D的,并且现在是因为没有太多时间花在这个期末作业上,所以要速成的解决方法。
赵4老师 2013-05-16
  • 打赏
  • 举报
回复
搜网络教程“学OpenGL编3D游戏”。
kestudio123 2013-05-16
  • 打赏
  • 举报
回复
引用 20 楼 y_chengyong 的回复:
[quote=引用 19 楼 kestudio123 的回复:] [quote=引用 18 楼 y_chengyong 的回复:] [quote=引用 16 楼 kestudio123 的回复:] [quote=引用 15 楼 y_chengyong 的回复:] [quote=引用 14 楼 kestudio123 的回复:] [quote=引用 11 楼 sdhexu 的回复:] 这个问题很简单。估计你在更新游戏精灵的位置的时候,没有考虑机器运行速度的问题。有的机器可能运行30帧/秒,有的可能120帧/秒,如果你简单的进行精灵位移,则速度块的机器,精灵的移动速度也快。 修正方法如下: 方法1、为精灵设定一个速度。每次更新画面时,计算距离上次渲染逝去了多少时间,然后用时间×速度,得到本次精灵位移的位移量。这样方法是最好的,速度块的机器上,可以更细腻,速度慢的机器上,步进大,但速度是一样的。 方法2、设置恒定的渲染时间间隔。必须限定在30帧,问题是,遇到连30帧都跑不完的破机器,就会有问题。
很简单,这种游戏的方法就是最常见的游戏中的“垂直同步功能”。一句话总结:就是额定计算一定量的数据,再记录流逝时间:多于规定则直接pass,少了则睡眠规定时间差后再开始。[/quote]好深奥啊,我是初学者,现在做期末大作业,字体显示在窗口上,在别的电脑上会忽明忽暗,怎么解决呢?[/quote] 这个问题我也不好说是什么原因造成的,所以就没有回答啊。要看具体分析啊。哈哈,没有看到你的代码,关于这样猜测也不太准。你也没有说清楚你是3D游戏还是2D游戏啊。运用了怎么样的渲染[/quote] if(myplanelife<0) myplanelife=0; glColor3f(1.0f,0.0f,0.0f); glRasterPos2f(-300.0f,200.0f); glPrint("Life: %d",myplanelife); glColor3f(1.0f,0.0f,0.0f); glRasterPos2f(-winwidth/2.0f+100.0f,-winheight/2.0f+100.0f); glPrint("Score: %d",totalScore); 在nehe教程里拷贝的,渲染不知道是什么概念?[/quote] 猜测,可能是跟你的渲染速度有关。你说新的机器可能跟不上,是不是你每次完成了一次动作就了刷新分数,太频繁,所以导致刷新速度跟不上?[/quote]是的,那不这样的话,该怎么解决呢?[/quote] 不清楚,你试试调整你glPrint("Life: %d",myplanelife);这句的执行速度。 另外,你会不会使用了多线程。多线程也有影响。就从上面你贴出来的几句代码可知:取用颜色和渲染动作,是分开两个步骤的,而且使用了静态变量,必然有线程不安全性。所以opengl对于多线程天生就是不安全的。 http://developer.178.com/201101/90030072892.html
y_chengyong 2013-05-16
  • 打赏
  • 举报
回复
引用 19 楼 kestudio123 的回复:
[quote=引用 18 楼 y_chengyong 的回复:] [quote=引用 16 楼 kestudio123 的回复:] [quote=引用 15 楼 y_chengyong 的回复:] [quote=引用 14 楼 kestudio123 的回复:] [quote=引用 11 楼 sdhexu 的回复:] 这个问题很简单。估计你在更新游戏精灵的位置的时候,没有考虑机器运行速度的问题。有的机器可能运行30帧/秒,有的可能120帧/秒,如果你简单的进行精灵位移,则速度块的机器,精灵的移动速度也快。 修正方法如下: 方法1、为精灵设定一个速度。每次更新画面时,计算距离上次渲染逝去了多少时间,然后用时间×速度,得到本次精灵位移的位移量。这样方法是最好的,速度块的机器上,可以更细腻,速度慢的机器上,步进大,但速度是一样的。 方法2、设置恒定的渲染时间间隔。必须限定在30帧,问题是,遇到连30帧都跑不完的破机器,就会有问题。
很简单,这种游戏的方法就是最常见的游戏中的“垂直同步功能”。一句话总结:就是额定计算一定量的数据,再记录流逝时间:多于规定则直接pass,少了则睡眠规定时间差后再开始。[/quote]好深奥啊,我是初学者,现在做期末大作业,字体显示在窗口上,在别的电脑上会忽明忽暗,怎么解决呢?[/quote] 这个问题我也不好说是什么原因造成的,所以就没有回答啊。要看具体分析啊。哈哈,没有看到你的代码,关于这样猜测也不太准。你也没有说清楚你是3D游戏还是2D游戏啊。运用了怎么样的渲染[/quote] if(myplanelife<0) myplanelife=0; glColor3f(1.0f,0.0f,0.0f); glRasterPos2f(-300.0f,200.0f); glPrint("Life: %d",myplanelife); glColor3f(1.0f,0.0f,0.0f); glRasterPos2f(-winwidth/2.0f+100.0f,-winheight/2.0f+100.0f); glPrint("Score: %d",totalScore); 在nehe教程里拷贝的,渲染不知道是什么概念?[/quote] 猜测,可能是跟你的渲染速度有关。你说新的机器可能跟不上,是不是你每次完成了一次动作就了刷新分数,太频繁,所以导致刷新速度跟不上?[/quote]是的,那不这样的话,该怎么解决呢?
y_chengyong 2013-05-15
  • 打赏
  • 举报
回复
引用 11 楼 sdhexu 的回复:
这个问题很简单。估计你在更新游戏精灵的位置的时候,没有考虑机器运行速度的问题。有的机器可能运行30帧/秒,有的可能120帧/秒,如果你简单的进行精灵位移,则速度块的机器,精灵的移动速度也快。 修正方法如下: 方法1、为精灵设定一个速度。每次更新画面时,计算距离上次渲染逝去了多少时间,然后用时间×速度,得到本次精灵位移的位移量。这样方法是最好的,速度块的机器上,可以更细腻,速度慢的机器上,步进大,但速度是一样的。 方法2、设置恒定的渲染时间间隔。必须限定在30帧,问题是,遇到连30帧都跑不完的破机器,就会有问题。
按照方法1,把问题解决了,不过还有一个问题,就是在窗口上写的字体,移植到其他电脑上去,会忽明忽暗的显示,在自己电脑上没问题的,这该如何解决??
y_chengyong 2013-05-15
  • 打赏
  • 举报
回复
引用 16 楼 kestudio123 的回复:
[quote=引用 15 楼 y_chengyong 的回复:] [quote=引用 14 楼 kestudio123 的回复:] [quote=引用 11 楼 sdhexu 的回复:] 这个问题很简单。估计你在更新游戏精灵的位置的时候,没有考虑机器运行速度的问题。有的机器可能运行30帧/秒,有的可能120帧/秒,如果你简单的进行精灵位移,则速度块的机器,精灵的移动速度也快。 修正方法如下: 方法1、为精灵设定一个速度。每次更新画面时,计算距离上次渲染逝去了多少时间,然后用时间×速度,得到本次精灵位移的位移量。这样方法是最好的,速度块的机器上,可以更细腻,速度慢的机器上,步进大,但速度是一样的。 方法2、设置恒定的渲染时间间隔。必须限定在30帧,问题是,遇到连30帧都跑不完的破机器,就会有问题。
很简单,这种游戏的方法就是最常见的游戏中的“垂直同步功能”。一句话总结:就是额定计算一定量的数据,再记录流逝时间:多于规定则直接pass,少了则睡眠规定时间差后再开始。[/quote]好深奥啊,我是初学者,现在做期末大作业,字体显示在窗口上,在别的电脑上会忽明忽暗,怎么解决呢?[/quote] 这个问题我也不好说是什么原因造成的,所以就没有回答啊。要看具体分析啊。哈哈,没有看到你的代码,关于这样猜测也不太准。你也没有说清楚你是3D游戏还是2D游戏啊。运用了怎么样的渲染[/quote] if(myplanelife<0) myplanelife=0; glColor3f(1.0f,0.0f,0.0f); glRasterPos2f(-300.0f,200.0f); glPrint("Life: %d",myplanelife); glColor3f(1.0f,0.0f,0.0f); glRasterPos2f(-winwidth/2.0f+100.0f,-winheight/2.0f+100.0f); glPrint("Score: %d",totalScore); 在nehe教程里拷贝的,渲染不知道是什么概念?
y_chengyong 2013-05-15
  • 打赏
  • 举报
回复
引用 16 楼 kestudio123 的回复:
[quote=引用 15 楼 y_chengyong 的回复:]
[quote=引用 14 楼 kestudio123 的回复:]
[quote=引用 11 楼 sdhexu 的回复:]
这个问题很简单。估计你在更新游戏精灵的位置的时候,没有考虑机器运行速度的问题。有的机器可能运行30帧/秒,有的可能120帧/秒,如果你简单的进行精灵位移,则速度块的机器,精灵的移动速度也快。

修正方法如下:
方法1、为精灵设定一个速度。每次更新画面时,计算距离上次渲染逝去了多少时间,然后用时间×速度,得到本次精灵位移的位移量。这样方法是最好的,速度块的机器上,可以更细腻,速度慢的机器上,步进大,但速度是一样的。

方法2、设置恒定的渲染时间间隔。必须限定在30帧,问题是,遇到连30帧都跑不完的破机器,就会有问题。


很简单,这种游戏的方法就是最常见的游戏中的“垂直同步功能”。一句话总结:就是额定计算一定量的数据,再记录流逝时间:多于规定则直接pass,少了则睡眠规定时间差后再开始。[/quote]好深奥啊,我是初学者,现在做期末大作业,字体显示在窗口上,在别的电脑上会忽明忽暗,怎么解决呢?[/quote]

这个问题我也不好说是什么原因造成的,所以就没有回答啊。要看具体分析啊。哈哈,没有看到你的代码,关于这样猜测也不太准。你也没有说清楚你是3D游戏还是2D游戏啊。运用了怎么样的渲染[/quote]就是这个左上角和左下角的字体。
kestudio123 2013-05-15
  • 打赏
  • 举报
回复
引用 15 楼 y_chengyong 的回复:
[quote=引用 14 楼 kestudio123 的回复:] [quote=引用 11 楼 sdhexu 的回复:] 这个问题很简单。估计你在更新游戏精灵的位置的时候,没有考虑机器运行速度的问题。有的机器可能运行30帧/秒,有的可能120帧/秒,如果你简单的进行精灵位移,则速度块的机器,精灵的移动速度也快。 修正方法如下: 方法1、为精灵设定一个速度。每次更新画面时,计算距离上次渲染逝去了多少时间,然后用时间×速度,得到本次精灵位移的位移量。这样方法是最好的,速度块的机器上,可以更细腻,速度慢的机器上,步进大,但速度是一样的。 方法2、设置恒定的渲染时间间隔。必须限定在30帧,问题是,遇到连30帧都跑不完的破机器,就会有问题。
很简单,这种游戏的方法就是最常见的游戏中的“垂直同步功能”。一句话总结:就是额定计算一定量的数据,再记录流逝时间:多于规定则直接pass,少了则睡眠规定时间差后再开始。[/quote]好深奥啊,我是初学者,现在做期末大作业,字体显示在窗口上,在别的电脑上会忽明忽暗,怎么解决呢?[/quote] 这个问题我也不好说是什么原因造成的,所以就没有回答啊。要看具体分析啊。哈哈,没有看到你的代码,关于这样猜测也不太准。你也没有说清楚你是3D游戏还是2D游戏啊。运用了怎么样的渲染
y_chengyong 2013-05-15
  • 打赏
  • 举报
回复
引用 14 楼 kestudio123 的回复:
[quote=引用 11 楼 sdhexu 的回复:] 这个问题很简单。估计你在更新游戏精灵的位置的时候,没有考虑机器运行速度的问题。有的机器可能运行30帧/秒,有的可能120帧/秒,如果你简单的进行精灵位移,则速度块的机器,精灵的移动速度也快。 修正方法如下: 方法1、为精灵设定一个速度。每次更新画面时,计算距离上次渲染逝去了多少时间,然后用时间×速度,得到本次精灵位移的位移量。这样方法是最好的,速度块的机器上,可以更细腻,速度慢的机器上,步进大,但速度是一样的。 方法2、设置恒定的渲染时间间隔。必须限定在30帧,问题是,遇到连30帧都跑不完的破机器,就会有问题。
很简单,这种游戏的方法就是最常见的游戏中的“垂直同步功能”。一句话总结:就是额定计算一定量的数据,再记录流逝时间:多于规定则直接pass,少了则睡眠规定时间差后再开始。[/quote]好深奥啊,我是初学者,现在做期末大作业,字体显示在窗口上,在别的电脑上会忽明忽暗,怎么解决呢?
kestudio123 2013-05-15
  • 打赏
  • 举报
回复
引用 11 楼 sdhexu 的回复:
这个问题很简单。估计你在更新游戏精灵的位置的时候,没有考虑机器运行速度的问题。有的机器可能运行30帧/秒,有的可能120帧/秒,如果你简单的进行精灵位移,则速度块的机器,精灵的移动速度也快。 修正方法如下: 方法1、为精灵设定一个速度。每次更新画面时,计算距离上次渲染逝去了多少时间,然后用时间×速度,得到本次精灵位移的位移量。这样方法是最好的,速度块的机器上,可以更细腻,速度慢的机器上,步进大,但速度是一样的。 方法2、设置恒定的渲染时间间隔。必须限定在30帧,问题是,遇到连30帧都跑不完的破机器,就会有问题。
很简单,这种游戏的方法就是最常见的游戏中的“垂直同步功能”。一句话总结:就是额定计算一定量的数据,再记录流逝时间:多于规定则直接pass,少了则睡眠规定时间差后再开始。
snake_xiongyang 2013-05-13
  • 打赏
  • 举报
回复
变慢是指变卡还是单位时间内移动的距离变慢 变卡无解,机器差没办法。 时间轴应该根据真实时间变化而不是根据帧数变化。
sniffer12345 2013-05-13
  • 打赏
  • 举报
回复
引用 10 楼 y_chengyong 的回复:
[quote=引用 8 楼 snake_xiongyang 的回复:] 变慢是指变卡还是单位时间内移动的距离变慢 变卡无解,机器差没办法。 时间轴应该根据真实时间变化而不是根据帧数变化。
求教!![/quote] 你可以搜索下 跳帧 另外现在PC上 像你这种小游戏 一般不会卡的 你还是想想怎么改改程序好
示申○言舌 2013-05-13
  • 打赏
  • 举报
回复
这个问题很简单。估计你在更新游戏精灵的位置的时候,没有考虑机器运行速度的问题。有的机器可能运行30帧/秒,有的可能120帧/秒,如果你简单的进行精灵位移,则速度块的机器,精灵的移动速度也快。 修正方法如下: 方法1、为精灵设定一个速度。每次更新画面时,计算距离上次渲染逝去了多少时间,然后用时间×速度,得到本次精灵位移的位移量。这样方法是最好的,速度块的机器上,可以更细腻,速度慢的机器上,步进大,但速度是一样的。 方法2、设置恒定的渲染时间间隔。必须限定在30帧,问题是,遇到连30帧都跑不完的破机器,就会有问题。
y_chengyong 2013-05-13
  • 打赏
  • 举报
回复
引用 8 楼 snake_xiongyang 的回复:
变慢是指变卡还是单位时间内移动的距离变慢 变卡无解,机器差没办法。 时间轴应该根据真实时间变化而不是根据帧数变化。
求教!!
y_chengyong 2013-05-13
  • 打赏
  • 举报
回复
引用 8 楼 snake_xiongyang 的回复:
变慢是指变卡还是单位时间内移动的距离变慢 变卡无解,机器差没办法。 时间轴应该根据真实时间变化而不是根据帧数变化。
不是卡。你说的时间轴是什么概念?每刷新一帧图片,它会位移一段距离,这个怎么用时间来控制呢?
y_chengyong 2013-05-12
  • 打赏
  • 举报
回复
引用 4 楼 lile1234_show 的回复:
弄个配置文件 , 看看可行不。
请问下,配置文件要怎么弄?opengl新手,只做出来个小游戏,不知道还有配置文件,求教!
y_chengyong 2013-05-11
  • 打赏
  • 举报
回复
??????
flyrack 2013-05-10
  • 打赏
  • 举报
回复
变慢就没救了 变快倒是有救 电脑配置低了 跑游戏卡是没解的
加载更多回复(4)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧