首页 新闻 赞助 找找看

cocos2d游戏主循环刷新机制

0
悬赏园豆:100 [已解决问题] 解决于 2013-12-12 16:58

fps和动画间隔的意义

60.0fps

为什么要不停的刷新屏幕。

没有更新也要刷新屏幕 ? fps 意义何在。

刚学习游戏需多地方不明白

~五百年~的主页 ~五百年~ | 初学一级 | 园豆:112
提问于:2013-12-12 14:51
< >
分享
最佳答案
1

fps 的意义是用来体现画面流畅度的,较高的 fps 能减少闪烁,以及提供更多的运动细节。

你见过古老的电影放映机吗?放映机的电动机匀速转动,按照固定时间间隔将下一个胶片投射到银幕上,如果因为连续多个画面是相同的,电动机就停止转动,那么你就必须在原始的胶片上给静止画面标注,并且要注明多长时间内始终投射此画面。但是放映机不是这么做的,而是将同一画面复制到连续的多张胶片上,这样电动机还是照样转,其工作模式不用更改,而制作胶片的人也不用为胶片做标注。这样事情就简单了,实际使用中你会发现,静止画面是相当少的,为了小概率发生事件去增加复杂的控制机制是得不偿失的。

收获园豆:100
Launcher | 高人七级 |园豆:45045 | 2013-12-12 15:25

谢谢你的回答,

还是不能贯穿起来

但是平滑卷轴技术,就是为了不重复绘制背景而开发出来的技术。

既然这样。fps越快不是越卡吗

~五百年~ | 园豆:112 (初学一级) | 2013-12-12 15:29

指教一下高人~~~

~五百年~ | 园豆:112 (初学一级) | 2013-12-12 15:41

@~五百年~: 要不这样吧,不能总是我写的多,你写的少,你先把动画的执行流程给我说一遍,并告诉我是如何体现出 FPS 的。

Launcher | 园豆:45045 (高人七级) | 2013-12-12 15:43

@Launcher: 嗯,我说一下我理解的动画~

位置动画  从位置 x1-x60  fps是60 就执行绘制动作60次

形态动画  如果只有20张   fps是20 就执行绘制动作20次

..

 

~五百年~ | 园豆:112 (初学一级) | 2013-12-12 15:47

@~五百年~: 错,FPS 全称叫着:Frames Per Second。跟你有多少张没关系,而是 1 秒内显示了多少帧。来,先看下解释:http://baike.baidu.com/subview/26953/10723700.htm,然后你再说说,为什么 FPS 高了,会越卡?

Launcher | 园豆:45045 (高人七级) | 2013-12-12 15:51

@Launcher:

是呀~~ 既然fps是Frames Per Second 只有20张图片的时候我fps调到20不是更好吗. ???

还有就是

一般精灵的动画fps和游戏主循环的fps是怎么绘制的~

~五百年~ | 园豆:112 (初学一级) | 2013-12-12 15:58

@~五百年~: 如果你只有 20 张,那么实际的 FPS 最高可能就是 20 (你必须注意到 FPS 是个测量的结果,不是你一开始控制出来的,明白这个道理吗?),但不一定就是 20 ,因为你 20 张中某些绘制较慢,那么实际的 FPS 就会低于 20。比如常见的 FPS 游戏,如果你打开帧数显示的话,它的帧数是变化的,而不是一个固定值,特别是到了复杂的渲染场景(比如雾霾,雨天,海水,碰撞等),或是需要高速运动的物体时,帧数就会显著下降。不是说我把帧数设置为 60 ,整个游戏就会一直以 60 桢来运行。甚至系统中其它一个程序的运行也会影响到实际的帧数,比如长时间的磁盘读写,高清视频的播放等等。

Launcher | 园豆:45045 (高人七级) | 2013-12-12 16:10

@Launcher: 

就是说比如一个显示他的GPU能力是200fps

在游戏中我定义一个60fps

如果游戏就一个背景图~ 他每秒钟还是要重绘60次。

如果游戏中有一个耗时的逻辑操作可能花1秒 那么他每秒钟只有1次.

~五百年~ | 园豆:112 (初学一级) | 2013-12-12 16:17

@~五百年~: 你使用的是GDI,GDI+, DirectX ,还是 OpenGL?请你给我解释下你这里的“重绘”在它们中的含义是什么?

Launcher | 园豆:45045 (高人七级) | 2013-12-12 16:24

@Launcher: 

我理解的就是clear 和 fill 。

还是这其中有缓存技术???? 请指教 。

~五百年~ | 园豆:112 (初学一级) | 2013-12-12 16:27

@~五百年~: 

比如一个场景。

里面有精灵和文字等。

先删掉。

然后再重新画一次。

??

~五百年~ | 园豆:112 (初学一级) | 2013-12-12 16:29

@~五百年~: 你使用的是GDI,GDI+, DirectX ,还是 OpenGL?

Launcher | 园豆:45045 (高人七级) | 2013-12-12 16:47

@Launcher: 

我在看cocos2d  他好像使用的openGL

 

 

~五百年~ | 园豆:112 (初学一级) | 2013-12-12 16:49

@~五百年~: 你最好把你的逻辑写一遍,比如你有个主循环,每隔 1 秒掉用一次绘制代码,然后刷新到显式区。假设此绘制代码能够在极短时间内完成,那么你的实际帧数就是 1 。

Launcher | 园豆:45045 (高人七级) | 2013-12-12 16:54

@Launcher: 

谢谢你的回答。~~ 太热心了》~

~五百年~ | 园豆:112 (初学一级) | 2013-12-12 16:57

@~五百年~: cocos2d 也使用 DirectX,这么看来你应该会编写使用 OpenGL 程序,那这就简单了,你还得看我最开始讲的电影放映的流程,这个流程就是动画的基础结构,如果你的动画变化很多很快,或者需要体现更多的运动细节,你就可以把发动机调快一点,如果你的动画不要求很高的运动细节,你就可以把发动机调慢一点,同时你也可以在绘制时控制是否重新绘制,以及是否把缓冲区刷新到显示区。平滑卷轴解决的问题是如何快速的绘制下一帧,并不控制此帧什么时候开始绘制。

Launcher | 园豆:45045 (高人七级) | 2013-12-12 17:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册