标题:躲避球游戏
取消只看楼主
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
结帖率:100%
 问题点数:0 回复次数:5 
搜索更多相关主题的帖子: 游戏 bbs bccn net html 
2017-10-10 10:45
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
虽然补充了大量的注释在内,还是不建议 新新手 看。

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

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

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


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


授人于鱼,不如授人于渔
早已停用QQ了
2017-10-10 10:48
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册: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
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
这个应该是Bug,球不动的话,其它球会“十”字形集结。

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

授人于鱼,不如授人于渔
早已停用QQ了
2022-08-25 20:59
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
太久的贴子再回复也默认不会在第一页的。
PropertyBag 本来就是一个大包裹,啥东西都可以装,前面有人用来装 数据库的对象来。本地调用远程MDB。

-----------------
因为多线程不是我的框架,所以 多线程的 代码不发,好像弄丢了。
把 一个循环里跑的内容,分拆到 4个线程里去跑,然后 子线程跑完后,主线程再把图像显示 出来。
VB6 的所有控件操作都是线程非安全,子线程不能操作涉及控件、GDI 等操作,只能操作内存。

授人于鱼,不如授人于渔
早已停用QQ了
2022-08-29 13:23
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
写这些代码,我主要的目的是 多线程使用
使用VB6自带绘图函数,会造成 子线程崩溃 ,然后我猜想  GDI 函数 也应该会导致这个问题。

这个程序的主要运算量,就是在屏幕上画这个圆的图形,单线程绘制 VB 效率上不去,FPS 达不到要求。
----------------------------
在初始化使用一次。得到原始数据,并初始化数组大小。这里使用 image 属于是为了不出现背景图形,如果有
PBag.WriteProperty "Picture", Picture1.Image

在每次重绘时使用一次。这里使用 picture 属性,是为了得到一个持久的图形
Pb1.Contents = Pbb                     
Set Picture1.Picture = Pb1.ReadProperty("Picture")  

--------------
Picture控件绘图区域,我理解分成二层,底层是 Picture ,上层是 Image ,VB 的绘图命令只操作到 Image 层,自动重绘开关也只影响这层。
Picture 层只有载入图像命令才能写入数据,并且是自动重绘的。


[此贴子已经被作者于2022-9-1 10:52编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2022-09-01 10:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-481230-1-1.html




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

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