| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5564 人关注过本帖, 1 人收藏
标题:躲避球游戏
只看楼主 加入收藏
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
结帖率:100%
收藏(1)
 问题点数:0 回复次数:14 
搜索更多相关主题的帖子: 游戏 bbs bccn net html 
2017-10-10 10:45
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:0 
虽然补充了大量的注释在内,还是不建议 新新手 看。

画圆使用的勾股定理来画的,而没使用三角函数,
估计三角函数也需要绘制二遍,没去测试。

看看有谁能补充一个画直线的函数,一个画矩形的函数。这个虽然简单,但自己懒了。

最关键的,谁能补充一个填充有边界区域的函数给我。这个我直不会。


[此贴子已经被作者于2017-10-10 10:51编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2017-10-10 10:48
fangbnu
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2017-10-25
收藏
得分:0 
2017-10-30 11:20
zhucezy
Rank: 1
等 级:新手上路
威 望:1
帖 子:4
专家分:0
注 册:2021-3-2
收藏
得分:0 
谢谢版主。我昨天搜索加快PSet算法时搜到这个帖子,提供了不错的思路。
2021-03-03 11:29
zhucezy
Rank: 1
等 级:新手上路
威 望:1
帖 子:4
专家分:0
注 册:2021-3-2
收藏
得分:0 
好的,居然还可以回复。
试验了一下代码,看到里面有不少我没见过的东西,还没仔细研究。

有一点觉得不够满意,就是玩家控制的大点运动时与鼠标有延迟,应该是画图刷新率为0.1s造成的。
按照自己的思路,把大点的绘制放到mousemove事件里,基本上可以消除延迟。

为了方便验证,大点我用circle方法做的,在非最大化窗口里速度没问题,最大化会有卡顿。
由于原代码是内存绘图的,大点、小点一起刷新,那就没办法解决0.1s的问题。
或许,1,大点运动有延迟,更有游戏性
      2,不要延迟,或许用二个图层好一些?
2021-03-03 11:40
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
收藏
得分:0 
这个应该是Bug,球不动的话,其它球会“十”字形集结。

关于画直线和画圆参考我这个:
程序代码:
Private Sub Form_Load()
Me.Show

Rem 在窗体坐标1000,1000的地方画一个半径800的圆
'画普通的圆
Circle (1000, 1000), 800
'画黄色的圆
Circle (1500, 1500), 800, RGB(255, 255, 0)

Rem 画实心圆
Me.DrawWidth = 100
'画默认颜色的圆
Me.PSet (2000, 2000)
'画背景色的圆
Me.PSet (2500, 2500), Me.BackColor
'画指定颜色的圆
PSet (3000, 3000), RGB(255, 255, 0)
End Sub


程序代码:
Private Sub Form_Load()
Form1.AutoRedraw = True
'Form1上画实心矩形
Form1.Line (500, 500)-(2000, 2000), vbRed, BF
Form1.Cls
'Form1上画空心矩形
Form1.Line (500, 500)-(2000, 2000), vbRed, B
'Form1.Cls
'Form1上画一条线段,左上—右下
Form1.Line (500, 500)-(2000, 2000), vbRed
'Form1.Cls
'Form1上画一条线段,右上—左下
Form1.Line (2000, 500)-(500, 2000), vbRed
End Sub


图片附件: 游客没有浏览图片的权限,请 登录注册

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-08-25 18:21
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:0 
不是直接在屏幕上画直线,而在 内存数组里画直线。
这个程序有一个多线程的版本,然后多线程程序里,绘图命令均 非线程安全,只能主线程进行绘图操作,子线程一但绘图,程序立即报错。
所以就拐了个弯,先把需要绘图的数据装到 byte 数组里,然后 多线程对 byte 数组操作,把需要绘图的数据,填进去,所以无法使用任何 绘图命令。、
为什么这样操作,因为 byte 数据 和  integer 及 LONG 数据,是原子操作,属于线程安全,可以在子线程中对同一个数组进行填充写入。

主线程绘图,FPS,我的电脑不会超过 20 。四线程绘图,100000 个点达到 32 。AMD K10 7850 / 8G / WIN7 。

-------------------------
绘图数据装到 byte数组里后,一个封包头 + BMP文件格式,绘图就是然后对这个BMP里的数据填充来绘图,这个填充只能自己写代码来填充,绘图命令操作不了的。
我程序里已有 画点函数,画圆环函数,画实心圆函数,但因直线、矩形函数没有用到,所以没写。

授人于鱼,不如授人于渔
早已停用QQ了
2022-08-25 20:54
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:0 
这个应该是Bug,球不动的话,其它球会“十”字形集结。

这个不是BUG,程序设定是,小球向大球集中,小球的移动只有三种移动方式,水平、垂直、45度斜线。
小球是根据自己的位置和大球的位置进行移动的,所以大球不动时,小球都是向 大球的 水平和垂直两根线方向集中。
这三种移动方式是最简单计算的。不需要使用到浮点运算。

授人于鱼,不如授人于渔
早已停用QQ了
2022-08-25 20:59
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
收藏
得分:0 
好的,B哥一定是职业程序员出身。我只是业余程序员,内存操作现在还搞不了。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-08-25 21:08
William1949
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:111
专家分:0
注 册:2009-3-17
收藏
得分:0 
PropertyBag 用在这个地方,还是头一次遇见


奇怪,为啥不能显示在第一页

[此贴子已经被作者于2022-8-27 10:40编辑过]

2022-08-27 10:32
快速回复:躲避球游戏
数据加载中...
 
   



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

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