游戏开发论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: 123321

关于游戏速度

[复制链接]

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-8-17 18:54:00 | 显示全部楼层

Re: Re: 关于游戏速度

bigbook2000: Re: 关于游戏速度



这是个好办法

但一般情况下我们不通过控制FPS来控制游戏速度,而是直接控制游戏进程。也就是说我们不...



其实这个方法没有上面16楼的好,我在那个宣三国英雄传的帖子里面也说了,这种延时并没有真正把图像渲染循环和逻辑处理循环分开,你的更新是建立在图像渲染循环里面的。

其实你仔细想想就会发现这么做没有多大意义,因为你的信息更新速度小于图像渲染速度,所以好几次连续的渲染其实是相同的东西,
也就是说虽然你得FPS可能会很高,但是实际上和你的设定值没有区别。
比如你的那个飞机的例子,其实只要FPS不低于25,那么就和25没有区别,因为在你没有执行If GetTickCount - OldTickCount >= Num Then里面的句子时,你的渲染结果都是一样的,多余的渲染只是增加系统负荷而已。
其实这个问题也是我在修改别人的程序时发现的,之后我就很注意不再片面追求高FPS了。

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-8-18 12:16:00 | 显示全部楼层

Re: 关于游戏速度

其实你仔细想想就会发现这么做没有多大意义,因为你的信息更新速度小于图像渲染速度,所以好几次连续的渲染其实是相同的东西


是有意义的,正如你所说,它确实增加了系统负担,在数据没有变化的时候实施了重复渲染,但他实现了游戏速度的可控,不过度依赖于FPS,当对象多而且复杂时,这种方式具有一定优势,这也是现代游戏编写通用的方式,他简化了我们对渲染对象速度的理解

Class A
   Sub Update( Time )
     If Time > UpdateTime Then A_Update( )
   End Sub
   Render( Time )
End Class

Class B
    Sub Update( Time )
     If Time > UpdateTime Then B_Update( )
   End Sub
   Render( Time )
End Class

... ...

Sub Update( Time )
  A.Update( Time )
  B.Update( Time )
  ... ...
End Sub

Sub Render( Time )
  A.Render( Time )
  B.Rendet( Time )
  ... ...
End Sub

Sub GameMain( )
  Update( Time )
  Render( Time )
End Sub

整个游戏框架就变成了上面这个样子,他可能不像我们所想象的那样实现了所谓的逻辑与渲染的分离,但是他实现了数据更新‘和图形输出的分离,可能我们会有各种各样的形式和我们自己的做法,但基本上我们不会偏离他,不管是过去DOS年代还是现代DX时代,把游戏速度交给Update控制直至每个对象自己控制速度,至于说是否控制FPS其实并不十分重要,也许有人认为空渲染很浪费,必须控制FPS,但并不影响整个游戏框架

说白了就是每个对象自己控制自己的速度,每个对象自己画自己的图形

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-8-19 13:27:00 | 显示全部楼层

Re:关于游戏速度

你的想法也有一定道理,不过我更侧重于代码效率,所以我说我不敢像你那样编代码。
大家各有各的想法,hehe

73

主题

612

帖子

618

积分

高级会员

Rank: 4

积分
618
发表于 2005-8-19 13:50:00 | 显示全部楼层

Re: Re: 关于游戏速度

bigbook2000: Re: 关于游戏速度



是有意义的,正如你所说,它确实增加了系统负担,在数据没有变化的时候实施了重复渲染,但他实现了游戏...

同意,而且我基本上使用的就是这种方法,方便以后扩充和修改程序

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
发表于 2005-8-21 05:01:00 | 显示全部楼层

Re:关于游戏速度

我的做法是使用渲染对象队列,当渲染时队列为空,那么就跳过渲染

游戏里面不是所有对象都会出现在屏幕的,会出现在屏幕的对象就加入到渲染队列,更可以灵活控制渲染顺序。上述的方法只是对该队列扩大应用,对以后扩充和修改影响不大

187

主题

600

帖子

606

积分

高级会员

Rank: 4

积分
606
QQ
发表于 2005-9-1 12:37:00 | 显示全部楼层

Re:关于游戏速度

zlcnkkm的方法是对的!我是使用引擎来负责任务调度,由引擎来动态的挂接需要的模块。
帅就一个字,另外,使用timer控件是不好的!建议你多学习一下VB的面向对象设计
类模块和模块处理

19

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
QQ
发表于 2005-10-22 11:51:00 | 显示全部楼层

Re: Re:关于游戏速度

天魂.NET: Re:关于游戏速度

Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Sub Sleep...

为什么当Num=40 的时候,速度为 25 FPS?
[em5]

50

主题

382

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2005-10-22 15:50:00 | 显示全部楼层

Re:关于游戏速度

呵呵,很简单,1000/40=25

我的QQ被盗了,现在用的是544473776
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 08:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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