| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5548 人关注过本帖
标题:关于VB对于系统资源的使用
只看楼主 加入收藏
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
点游戏.rar (2.74 KB)


你参考参考吧。
这个程序里采取的是二次缓冲绘图,所以不会闪。我没加计分啥情况的。
还有碰撞检测还有点问题,可能是因为绘图就没绘好的原因。
感觉绘图半径的线的大小需要再仔细琢磨一下。



[此贴子已经被作者于2016-5-26 21:32编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2016-05-26 21:29
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
回复 11楼 风吹过b
风版事实上不需要那么麻烦再替我写个工程的,我只是需要一点建议,我可不是什么伸手党,您这样反而会让我过意不去的……真是麻烦了……
另外,您的工程我看了一下,借鉴作用有,但是不算很大。您的工程的算法有些不大一样,同时也没有解决我最重要的问题:程序卡顿问题
我把我的工程源文件发上来吧,您如果不嫌麻烦的话看一下吧,测试一下我的工程,看一下程序结果,然后在此基础上提一点加快程序运行速度的建议吧

我不是对您的方案否定,只是您的方案不适合我罢了……

以下是源文件
小游戏.zip (5.33 KB)

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2016-05-27 17:42
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
看了你的代码,
其他都没啥问题,关键就是在 显示部分。
使用控件来进行动画,肯定慢的。你的代码,说实在的,我无从下手改造。

还是建议你按我的显示方案改造,我的代码里,我是偷懒只用一个二维数组保存,按规范应该使用一个结构体。
这个结构的定义包括以下内容:
X
Y
移动速度
半径
生存周期
点颜色

如果每个点不一样的大,移动速度不一样
那么后面这4个属性都可以定义。然后绘图时使用上,以达到不同的点不同的大小和速度。



授人于鱼,不如授人于渔
早已停用QQ了
2016-05-27 19:37
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:4 
1、注销掉Debug.Print Movement语句,print很耗时的。
2、在next i语句前加句doevents,这样至少移动空心球不会卡顿。
3、再scalemode为twip的情况下,移动的距离最好是15的倍数,这正好是屏幕上的一个点,你移动的是20,则会在转换为屏幕的点坐标时产生小数,导致移动不均匀。

[此贴子已经被作者于2016-5-27 21:22编辑过]


能编个毛线衣吗?
2016-05-27 21:11
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
谢谢,我立刻去试试看

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2016-05-28 07:52
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
14L的方案测试过了,注销Debug语句后在编译环境中速度略微快了一点,但是依然会在150个点以上时卡顿
Next i语句前加了Doevents,解决了大的点的闪烁问题
移动距离更换为15后,基本没有影响,个人认为是因为我有一句代码已经注定了不可能让移动距离为整数:
程序代码:
If Movement = 0 Then Movement = 1
If Shape1.Top > Shape(i).Top Then
  Shape(i).Top = Shape(i).Top + 15 / Movement
ElseIf Shape1.Top < Shape(i).Top Then
  Shape(i).Top = Shape(i).Top - 15 / Movement


我最近思考得出了一点结果,我觉得导致程序速度不佳的一个原因很可能是在Timer1里面:
我使用了For循环,而For循环是在一个Timer里的,这就导致随着点的增多,Timer的运行速度会越来越慢。
个人解决方案:编写一个算法,判定当点的数量大于X时,启用某个Timer,就是每个Timer仅仅处理50个点的移动。
但是算法还没想出来,正在努力思考中,先把我的想法发上来,如果大家发现我的想法有误也可以即使告诉我,让我不用在岔路上越走越远。

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2016-05-28 08:05
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 16楼 renxiaoyao36
用vb的控件或普通作图语句是完成不了多元素作图的,因为在一定的时间片断内完成不了全屏刷图,卡顿是肯定的。实际上即使用api的bitblt函数刷我现在的这个1680*1050的屏幕也只有每秒4帧左右的刷屏速率,实际游戏处理多元素图形时,同样面临刷新速率跟不上的问题,一般的解决办法是采取分层处理手段或仿真手段,具体做法是游戏数据运算实际是在数组矩阵中完成,往屏幕上显示则是实时刷敌我关系最近的几个元素,其他元素则刷的过来就刷,刷不过来就丢弃,反正不影响实际战斗结果。

能编个毛线衣吗?
2016-05-28 09:27
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
谢谢大家的帮助,我先把帖子结了,到时候另外启一个帖子继续讨论吧

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2016-05-28 17:32
快速回复:关于VB对于系统资源的使用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048527 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved