开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 150|回复: 8
收起左侧

[已解决] 有没有其他组件可以不卡顿的。

 关闭 [复制链接]
结帖率:38% (3/8)
发表于 2025-3-7 23:22:27 | 显示全部楼层 |阅读模式   广东省广州市
20精币
写了一个模拟雷达的小东西,但是使用画板卡顿严重,换成了动画框,好了一点,但不多,50毫秒下也是卡顿严重,10个目标都卡顿严重了,我还想搞一个1000个目标10毫秒不卡顿的。
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
当前角度整数型  
敌人列表敌人信息0 
上次扫描方向整数型  
颜色表整数型0 
' 自定义数据类型开始---
数据类型名公开备 注
轨迹点信息 
成员名类 型传址数组备 注
角度整数型  
半径整数型  
数据类型名公开备 注
敌人信息 
成员名类 型传址数组备 注
角度整数型  
半径整数型  
颜色整数型  
轨迹点轨迹点信息 2
' 自定义数据类型结束---
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
_启动窗口.宽度 = 700
_启动窗口.高度 = 600
动画框1.宽度 = 600
动画框1.高度 = 600
初始化颜色表 ()
绘制雷达背景图 ()
初始化敌人 ()
子程序名返回值类型公开备 注
初始化颜色表  
颜色表 = { #红色, #绿色, #蓝色, #黄色, #紫色, #青绿, #粉红 }
子程序名返回值类型公开备 注
绘制雷达背景图  
动画框1.清除背景 (, , , )
动画框1.画笔颜色 = #白色
动画框1.画笔粗细 = 2
动画框1.刷子颜色 = #浅灰
绘制扇形 (0, 500, 600, 600, 315, 405)
绘制角度刻度线 ()
子程序名返回值类型公开备 注
初始化敌人  
变量名类 型静态数组备 注
i整数型 
重定义数组 (敌人列表, 假, 3)  ' 初始3个敌人
计次循环首 (3, i)
敌人列表 [i].角度 = 取随机数 (-45, 45)
敌人列表 [i].半径 = 取随机数 (50, 300)
敌人列表 [i].颜色 = 颜色表 [i % 取数组成员数 (颜色表) + 1]
重定义数组 (敌人列表 [i].轨迹点, 假, 0)  ' 初始化轨迹点数组为空
计次循环尾 ()
子程序名返回值类型公开备 注
绘制扇形  
参数名类 型参考可空数组备 注
左边整数型
顶边整数型
右边整数型
底边整数型
起始角度整数型
终止角度整数型
变量名类 型静态数组备 注
圆心X整数型 
圆心Y整数型 
半径整数型 
点数组整数型2
点索引整数型 
圆心X (左边 + 右边) ÷ 2
圆心Y (顶边 + 底边) ÷ 2
半径 (右边 - 左边) ÷ 2
点索引 = 1
重定义数组 (点数组, 假, (终止角度 - 起始角度 + 2) × 2)
点数组 [点索引] = 圆心X
点索引 = 点索引 + 1
点数组 [点索引] = 圆心Y
点索引 = 点索引 + 1
计次循环首 (终止角度 - 起始角度 + 1, 当前角度)
当前角度 = 当前角度 + 起始角度 - 1
点数组 [点索引] = 圆心X + 半径 × 求正弦 (当前角度 × 3.14159 ÷ 180)
点索引 = 点索引 + 1
点数组 [点索引] = 圆心Y - 半径 × 求余弦 (当前角度 × 3.14159 ÷ 180)
点索引 = 点索引 + 1
计次循环尾 ()
动画框1.画多边形 (点数组, )
子程序名返回值类型公开备 注
绘制角度刻度线  
变量名类 型静态数组备 注
角度整数型 
圆心X整数型 
圆心Y整数型 
半径整数型 
起点X整数型 
起点Y整数型 
终点X整数型 
终点Y整数型 
角度文本坐标X整数型 
角度文本坐标Y整数型 
角度文本半径整数型 
圆心X = 300
圆心Y = 550
半径 = 300
角度文本半径 = 400
计次循环首 (90, 角度)
当前角度 = 315 + 角度
起点X = 圆心X + 半径 × 0.9 × 求正弦 (当前角度 × 3.14159 ÷ 180)
起点Y = 圆心Y - 半径 × 0.9 × 求余弦 (当前角度 × 3.14159 ÷ 180)
角度文本坐标X = 圆心X + 角度文本半径 × 0.9 × 求正弦 (当前角度 × 3.14159 ÷ 180)
角度文本坐标Y = 圆心Y - 角度文本半径 × 0.9 × 求余弦 (当前角度 × 3.14159 ÷ 180)
终点X = 圆心X + 半径 × 求正弦 (当前角度 × 3.14159 ÷ 180)
终点Y = 圆心Y - 半径 × 求余弦 (当前角度 × 3.14159 ÷ 180)
动画框1.画直线 (起点X, 起点Y, 终点X, 终点Y)
如果真 (角度 % 4 = 1)
动画框1.文本颜色 = #蓝灰
如果真 (角度 - 45 < 0)
动画框1.定位写出 (角度文本坐标X, 角度文本坐标Y, 到文本 (角度 - 45)“°”)
如果真 (角度 > 45)
动画框1.定位写出 (角度文本坐标X, 角度文本坐标Y, “+”到文本 (角度 - 45)“°”)


计次循环尾 ()
子程序名返回值类型公开备 注
_时钟1_周期事件  
变量名类 型静态数组备 注
圆心X整数型 
圆心Y整数型 
半径整数型 
终点X整数型 
终点Y整数型 
扫描角度整数型 
扫描方向整数型 
i整数型 
新轨迹点轨迹点信息 
如果真 (扫描方向 = 0)
扫描方向 = 1

动画框1.清除背景 (, , , )
绘制雷达背景图 ()
动画框1.画笔颜色 = #红色
动画框1.画笔粗细 = 2
圆心X = 300
圆心Y = 550
半径 = 300
扫描角度 = 扫描角度 + 扫描方向
' 检测并更新被扫描到的敌人
计次循环首 (取数组成员数 (敌人列表), i)
如果真 (敌人列表 [i].角度 + 45 = 扫描角度)
' 添加当前点到轨迹数组
新轨迹点.角度 = 敌人列表 [i].角度
新轨迹点.半径 = 敌人列表 [i].半径
加入成员 (敌人列表 [i].轨迹点, 新轨迹点)
' 保持最多4个轨迹点
如果真 (取数组成员数 (敌人列表 [i].轨迹点) > 4)
删除成员 (敌人列表 [i].轨迹点, 1, 1)
' 生成新位置
敌人列表 [i].角度 = 取随机数 (-45, 45)
敌人列表 [i].半径 = 取随机数 (50, 300)

计次循环尾 ()
如果 (扫描角度 > 90)
扫描角度 = 90
扫描方向 = -1
如果 (扫描角度 < 0)
扫描角度 = 0
扫描方向 = 1




当前角度 = 315 + 扫描角度
透明标签1.标题 = “当前角度:”到文本 (扫描角度 - 45)“°”  ' 显示实际角度值
终点X = 圆心X + 半径 × 求正弦 (当前角度 × 3.14159 ÷ 180)
终点Y = 圆心Y - 半径 × 求余弦 (当前角度 × 3.14159 ÷ 180)
动画框1.画直线 (圆心X, 圆心Y, 终点X, 终点Y)
绘制敌人 ()
子程序名返回值类型公开备 注
绘制敌人  
变量名类 型静态数组备 注
i整数型 
j整数型 
圆心X整数型 
圆心Y整数型 
原角度整数型 
x1整数型 
y1整数型 
x2整数型 
y2整数型 
当前轨迹点轨迹点信息 
圆心X = 300
圆心Y = 550
计次循环首 (取数组成员数 (敌人列表), i)
' 绘制轨迹连线
如果真 (取数组成员数 (敌人列表 [i].轨迹点) ≥ 2)
动画框1.画笔颜色 = 敌人列表 [i].颜色
动画框1.画笔粗细 = 1
计次循环首 (取数组成员数 (敌人列表 [i].轨迹点) - 1, j)
当前轨迹点 = 敌人列表 [i].轨迹点 [j]
原角度 = 315 + 当前轨迹点.角度 + 45
x1 = 圆心X + 当前轨迹点.半径 × 求正弦 (原角度 × #pi ÷ 180)
y1 = 圆心Y - 当前轨迹点.半径 × 求余弦 (原角度 × #pi ÷ 180)
当前轨迹点 = 敌人列表 [i].轨迹点 [j + 1]
原角度 = 315 + 当前轨迹点.角度 + 45
x2 = 圆心X + 当前轨迹点.半径 × 求正弦 (原角度 × #pi ÷ 180)
y2 = 圆心Y - 当前轨迹点.半径 × 求余弦 (原角度 × #pi ÷ 180)
画虚线 (x1, y1, x2, y2)
计次循环尾 ()

' 绘制轨迹点
计次循环首 (取数组成员数 (敌人列表 [i].轨迹点), j)
当前轨迹点 = 敌人列表 [i].轨迹点 [j]
原角度 = 315 + 当前轨迹点.角度 + 45
x1 = 圆心X + 当前轨迹点.半径 × 求正弦 (原角度 × #pi ÷ 180)
y1 = 圆心Y - 当前轨迹点.半径 × 求余弦 (原角度 × #pi ÷ 180)
动画框1.刷子颜色 = 敌人列表 [i].颜色
动画框1.画椭圆 (x1 - 3, y1 - 3, x1 + 3, y1 + 3)
计次循环尾 ()
' 绘制当前位置
原角度 = 315 + 敌人列表 [i].角度 + 45
x1 = 圆心X + 敌人列表 [i].半径 × 求正弦 (原角度 × #pi ÷ 180)
y1 = 圆心Y - 敌人列表 [i].半径 × 求余弦 (原角度 × #pi ÷ 180)
动画框1.刷子颜色 = 敌人列表 [i].颜色
动画框1.画椭圆 (x1 - 5, y1 - 5, x1 + 5, y1 + 5)
计次循环尾 ()
子程序名返回值类型公开备 注
画虚线  
参数名类 型参考可空数组备 注
x1整数型
y1整数型
x2整数型
y2整数型
变量名类 型静态数组备 注
步长整数型 
dx整数型 
dy整数型 
总步数整数型 
i整数型 
dx = x2 - x1
dy = y2 - y1
总步数 = 求平方根 (dx × dx + dy × dy) ÷ 10  ' 控制虚线密度
如果真 (总步数 < 1)
总步数 = 1

计次循环首 (总步数, i)
如果 (i % 2 = 1)  ' 交替绘制线段
动画框1.画直线 (x1 + dx (i - 1) ÷ 总步数, y1 + dy (i - 1) ÷ 总步数, x1 + dx × i ÷ 总步数, y1 + dy × i ÷ 总步数)



计次循环尾 ()
子程序名返回值类型公开备 注
更新敌人位置  
变量名类 型静态数组备 注
i整数型 
计次循环首 (取数组成员数 (敌人列表), i)
敌人列表 [i].角度 = 取随机数 (-45, 45)
敌人列表 [i].半径 = 取随机数 (50, 300)
计次循环尾 ()
子程序名返回值类型公开备 注
_hk条1_位置被改变  
时钟1.时钟周期 = hk条1.位置
透明标签2.标题 = “扫描速度:”到文本 (hk条1.位置)“   毫秒”
子程序名返回值类型公开备 注
_按钮2_停止扫描_被单击  
时钟1.时钟周期 = 0
hk条1.禁止 = 真
子程序名返回值类型公开备 注
_按钮1_开始扫描_被单击  
hk条1.禁止 = 假
时钟1.时钟周期 = hk条1.位置


i支持库列表   支持库注释   
iext2扩展界面支持库二
iext扩展界面支持库一

360截图20250307231756.png

最佳答案

查看完整内容

不是画板的问题 是你算法的问题没有源码所以跑步起来 不方便测试 [e=4].版本 2 .子程序 画虚线 .参数 x1, 整数型 .参数 y1, 整数型 .参数 x2, 整数型 .参数 y2, 整数型 .局部变量 步数, 整数型 .局部变量 计次, 整数型 步数 = 10 ' 控制虚线密度 置入代码 ({ 54, 139, 69, 8, 54, 43, 69, 16, 15, 175, 192, 54, 139, 93, 12, 54, 43, 93, 20, 15, 175, 219, 1, 216, 242, 15, 42, 192, 242, 15, 81, 192, ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:100% (3/3)

签到天数: 4 天

发表于 2025-3-7 23:22:28 | 显示全部楼层   贵州省毕节市
不是画板的问题 是你算法的问题没有源码所以跑步起来 不方便测试

  
子程序名返回值类型公开备 注
画虚线  
参数名类 型参考可空数组备 注
x1整数型
y1整数型
x2整数型
y2整数型
变量名类 型静态数组备 注
步数整数型 
计次整数型 
步数 = 10  ' 控制虚线密度
置入代码 ({ 54, 139, 69, 8, 54, 43, 69, 16, 15, 175, 192, 54, 139, 93, 12, 54, 43, 93, 20, 15, 175, 219, 1, 216, 242, 15, 42, 192, 242, 15, 81, 192, 184, 10, 0, 0, 0, 242, 15, 42, 200, 242, 15, 94, 193, 54, 242, 15, 17, 69, 252 })
' MOV EAX, DWORD PTR SS:[EBP+0X08]
' SUB EAX, DWORD PTR SS:[EBP+0X10]
' IMUL EAX, EAX
' MOV EBX, DWORD PTR SS:[EBP+0X0C]
' SUB EBX, DWORD PTR SS:[EBP+0X14]
' IMUL EBX, EBX
' ADD EAX, EBX
' CVTSI2SD XMM0, EAX
' SQRTSD XMM0, XMM0
' MOV EAX, 0X0A
' CVTSI2SD XMM1, EAX
' DIVSD XMM0, XMM1
' MOVSD QWORD PTR SS:[EBP-0X04], XMM0
变量循环首 (1, 步数, 2, 计次)  ' 交替绘制线段
动画框1.画直线 (x1 + dx (i - 1) ÷ 总步数, y1 + dy (i - 1) ÷ 总步数, x1 + dx × i ÷ 总步数, y1 + dy × i ÷ 总步数)
变量循环尾 ()

点评

除法会比乘法慢 如果涉及大量的除以某个不会发生变化的数 可以换成 乘以这个数的倒数   贵州省毕节市  发表于 2025-3-8 03:33
大量类似 原角度 = 315 + 当前轨迹点.角度 + 45 应该写成 原角度 = 当前轨迹点.角度 + 355   贵州省毕节市  发表于 2025-3-8 03:13
大量的 角度 × 3.14159 ÷ 180 可以试着改成 角度× 0.01745329251944   贵州省毕节市  发表于 2025-3-8 03:10

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 3 天

发表于 2025-3-7 23:46:12 | 显示全部楼层   辽宁省丹东市
时钟替换成线程 你看看卡不卡
回复

使用道具 举报

结帖率:100% (3/3)

签到天数: 4 天

发表于 2025-3-8 03:24:32 | 显示全部楼层   贵州省毕节市
  
子程序名返回值类型公开备 注
绘制角度刻度线  
变量名类 型静态数组备 注
角度整数型 
圆心X整数型 
圆心Y整数型 
半径整数型 
起点X整数型 
起点Y整数型 
终点X整数型 
终点Y整数型 
角度文本坐标X整数型 
角度文本坐标Y整数型 
角度文本半径整数型 
圆心X = 300
圆心Y = 550
半径 = 300
角度文本半径 = 400  ' 这4个一直不会发生变化 那就不应该用变量 而是立即数 直接参与运算
计次循环首 (90, 角度)
当前角度 = 315 + 角度
起点X = 圆心X + 半径 × 0.9 × 求正弦 (当前角度 × 3.14159 ÷ 180)
起点Y = 圆心Y - 半径 × 0.9 × 求余弦 (当前角度 × 3.14159 ÷ 180)
终点X = 圆心X + 半径 × 求正弦 (当前角度 × 3.14159 ÷ 180)
终点Y = 圆心Y - 半径 × 求余弦 (当前角度 × 3.14159 ÷ 180)
动画框1.画直线 (起点X, 起点Y, 终点X, 终点Y)
如果真 (角度 % 4 = 1)  ' 求余数用汇编
动画框1.文本颜色 = #蓝灰
角度文本坐标X = 圆心X + 角度文本半径 × 0.9 × 求正弦 (当前角度 × 3.14159 ÷ 180)
角度文本坐标Y = 圆心Y - 角度文本半径 × 0.9 × 求余弦 (当前角度 × 3.14159 ÷ 180) ' 这两个东西 求余数=1的时候才用到 那就用到的时候才计算
如果真 (角度 - 45 < 0)
动画框1.定位写出 (角度文本坐标X, 角度文本坐标Y, 到文本 (角度 - 45)“°”)
如果真 (角度 > 45)
动画框1.定位写出 (角度文本坐标X, 角度文本坐标Y, “+”到文本 (角度 - 45)“°”)


计次循环尾 ()

  
子程序名返回值类型公开备 注
求余整数型 
参数名类 型参考可空数组备 注
被除整数型
除数整数型
置入代码 ({ 49, 210, 54, 139, 69, 8, 54, 139, 77, 12, 227, 2, 247, 241, 137, 208, 201, 194, 8, 0 })
返回 (0)
' XOR EDX, EDX
' MOV EAX, DWORD PTR SS:[EBP+0X08]
' MOV ECX, DWORD PTR SS:[EBP+0X0C]
' JECXZ END
' DIV ECX
' END:
' MOV EAX, EDX
' LEAVE
' RET 0X08


点评

角度 - 45 < 0 应该写成 角度<45 然后 大于45的判断删掉 应该用判断 一个就可以了 而不是两个如果真   贵州省毕节市  发表于 2025-3-8 03:26
回复

使用道具 举报

结帖率:38% (3/8)
 楼主| 发表于 2025-3-8 11:16:27 | 显示全部楼层   广东省广州市
笨来无一悟 发表于 2025-3-8 03:24
[e=4].版本 2

.子程序 绘制角度刻度线

好的,谢谢大佬,我试试看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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