|

10精币
我的问题是:敌方坦克在自动前进的过程中总是不时地就穿墙而过,我使用过多线程处理碰撞事件,但是还是没有解决,下面是我的全部代码,求大神帮忙,这个问题已经困扰我两年了,在16年的时候我也在精易论坛发过同样的帖子但是没有解决,这次希望大神帮帮忙
这个是我在16年发的帖子
这个是敌方坦克碰撞以后的处理代码,我把这三段代码放到最前面,后面是全部代码:
下面是碰撞到物体子程序:
.版本 2
.支持库 iext2
.子程序 _动画框_碰撞到物体
.参数 碰撞物体标识值, 整数型
.参数 碰撞前横坐标, 整数型
.参数 碰撞前纵坐标, 整数型
.参数 被碰撞物体标识值, 整数型
.如果真 (碰撞物体标识值 = 我方坦克)
置坦克位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标)
返回 ()
.如果真结束
.如果真 (动画框.取附加文本 (碰撞物体标识值) = “炮弹” 且 动画框.取类型 (被碰撞物体标识值) = #障碍物类型值)
动画框.销毁物体 (被碰撞物体标识值)
返回 ()
.如果真结束
.如果真 (动画框.取附加文本 (碰撞物体标识值) = “敌方坦克”)
置坦克位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标)
置敌方坦克角度 (碰撞物体标识值)
返回 ()
下面是置坦克位置子程序:
.版本 2
.支持库 iext2
.子程序 置坦克位置
.参数 碰撞物体标识值, 整数型
.参数 碰撞前横坐标, 整数型
.参数 碰撞前纵坐标, 整数型
.如果 (动画框.取角度 (碰撞物体标识值) = 0)
动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标 + 5, 真)
.否则
.如果 (动画框.取角度 (碰撞物体标识值) = 180)
动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标 - 5, 真)
.否则
.如果 (动画框.取角度 (碰撞物体标识值) = 270)
动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标 + 5, 碰撞前纵坐标, 真)
.否则
.如果 (动画框.取角度 (碰撞物体标识值) = 90)
动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标 - 5, 碰撞前纵坐标, 真)
.否则
.如果结束
.如果结束
.如果结束
.如果结束
下面是置对方坦克角度子程序
.版本 2
.支持库 iext2
.子程序 置敌方坦克角度
.参数 物体标识值, 整数型
.局部变量 角度数组, 整数型, , "4"
角度数组 = { 0, 90, 180, 270 }
置随机数种子 ()
动画框.置角度 (物体标识值, 角度数组 [取随机数 (1, 4)])
以下是全部代码:
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 我方坦克 | 整数型 | | 我方坦克速度 | 整数型 | | 我方炮弹 | 整数型 | | 敌方坦克 | 整数型 | | 红砖 | 整数型 | | 攻击间隔标记 | 逻辑型 | | 子弹爆炸图 | 整数型 | | 置随机数种子 () 计次循环首 (10, ) css = css + 20  红砖 = 动画框. 创建物体 (动画物体, css, 50, , “红砖”) 动画框. 置图片 (红砖, #图_红砖, ) 动画框. 置类型 (红砖, #障碍物类型值 ) 计次循环尾 () 计次循环首 (10, ) css = css + 30  红砖 = 动画框. 创建物体 (动画物体, css, 300, , “红砖”) 动画框. 置图片 (红砖, #图_红砖, ) 动画框. 置类型 (红砖, #障碍物类型值 ) 计次循环尾 ()我方坦克速度 = 1 攻击间隔标记 = 真 创建我方坦克 ()创建敌方坦克 ()坦克随机角度时钟.时钟周期 = 取随机数 (1000, 13000 )|
_动画框_监视键被按下 | | | |
键代码 | 整数型 | | | | 功能键状态 | 整数型 | | | |
如果真 (键代码 = #W键 ) 动画框. 置角度 (我方坦克, 0 ) 动画框. 前进 (我方坦克, 我方坦克速度 ) 如果真 (键代码 = #S键 ) 动画框. 置角度 (我方坦克, 180 ) 动画框. 前进 (我方坦克, 我方坦克速度 ) 如果真 (键代码 = #A键 ) 动画框. 置角度 (我方坦克, 270 ) 动画框. 前进 (我方坦克, 我方坦克速度 ) 如果真 (键代码 = #D键 ) 动画框. 置角度 (我方坦克, 90 ) 动画框. 前进 (我方坦克, 我方坦克速度 ) 我方坦克 = 动画框. 创建物体 (动画物体, 50, 0, , )动画框. 置图片 (我方坦克, #图_我方坦克, )动画框. 缩放 (我方坦克, 500, 500 )动画框. 置类型 (我方坦克, #我方坦克类型值 )动画框. 添加监视键 (1, #W键, #S键, #A键, #D键 )敌方坦克 = 动画框. 创建物体 (动画物体, 0, 0, , “敌方坦克”)动画框. 置图片 (敌方坦克, #图_1分坦克, )动画框. 置类型 (敌方坦克, #敌方坦克类型值 )动画框. 置角度 (敌方坦克, 180 ) |
_动画框_碰撞到边界 | 逻辑型 | | |
物体标识值 | 整数型 | | | | 碰撞前横坐标 | 整数型 | | | | 碰撞前纵坐标 | 整数型 | | | | 边界类型 | 整数型 | | | |
如果真 (动画框. 取附加文本 (物体标识值 ) = “我方坦克”) 置坦克位置 (物体标识值, 碰撞前横坐标, 碰撞前纵坐标 ) 如果真 (动画框. 取附加文本 (物体标识值 ) = “敌方坦克”) 置坦克位置 (物体标识值, 碰撞前横坐标, 碰撞前纵坐标 ) 置敌方坦克角度 (物体标识值 ) |
_动画框_碰撞到物体 | | | |
碰撞物体标识值 | 整数型 | | | | 碰撞前横坐标 | 整数型 | | | | 碰撞前纵坐标 | 整数型 | | | | 被碰撞物体标识值 | 整数型 | | | |
如果真 (碰撞物体标识值 = 我方坦克 ) 置坦克位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标 ) 返回 () 如果真 (动画框. 取附加文本 (碰撞物体标识值 ) = “炮弹” 且 动画框. 取类型 (被碰撞物体标识值 ) = #障碍物类型值 ) 动画框. 销毁物体 (被碰撞物体标识值 ) 返回 () 如果真 (动画框. 取附加文本 (碰撞物体标识值 ) = “敌方坦克”) 置坦克位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标 ) 置敌方坦克角度 (碰撞物体标识值 ) 返回 () |
_动画框_按下某键 | 逻辑型 | | |
键代码 | 整数型 | | | | 功能键状态 | 整数型 | | | |
如果真 (键代码 = #回车键 且 攻击间隔标记 ) 创建我方炮弹 () 延迟 (200 )攻击间隔标记 = 真 如果真 (动画框. 取附加文本 (物体标识值 ) = “炮弹”) 销毁炮弹 (物体标识值 ) 如果真 (音效标识 = #炮弹爆炸音效 ) 播放音乐 ( #声_炮弹爆炸, ) 如果真 (音效标识 = #发射音效 ) 播放音乐 ( #声_发射, ) 如果真 (动画框. 取附加文本 (物体标识值 ) = “炮弹”) 判断 (动画框. 取角度 (物体标识值 ) = 0 )  子弹爆炸图 = 动画框. 创建物体 (动画物体, 动画框. 取物体左边 (物体标识值 ), 动画框. 取物体顶边 (物体标识值 ) - 15, , ) 判断 (动画框. 取角度 (物体标识值 ) = 180 )  子弹爆炸图 = 动画框. 创建物体 (动画物体, 动画框. 取物体左边 (物体标识值 ), 动画框. 取物体顶边 (物体标识值 ) + 15, , ) 判断 (动画框. 取角度 (物体标识值 ) = 90 )  子弹爆炸图 = 动画框. 创建物体 (动画物体, 动画框. 取物体左边 (物体标识值 ) + 15, 动画框. 取物体顶边 (物体标识值 ), , ) 判断 (动画框. 取角度 (物体标识值 ) = 270 )  子弹爆炸图 = 动画框. 创建物体 (动画物体, 动画框. 取物体左边 (物体标识值 ) - 15, 动画框. 取物体顶边 (物体标识值 ), , )    动画框.置图片 (子弹爆炸图, #图_炮弹爆炸, ) 动画框. 播放动画 (子弹爆炸图, 1, 真, , ) 启动线程 (&播放游戏音效, #炮弹爆炸音效, ) 攻击间隔标记 = 假 我方炮弹 = 动画框. 创建物体 (动画物体, 动画框. 取物体左边 (我方坦克 ) + 14.5, 动画框. 取物体顶边 (我方坦克 ) + 15, , “炮弹”)动画框. 置图片 (我方炮弹, #图_炮弹, )动画框. 置角度 (我方炮弹, 动画框. 取角度 (我方坦克 )) 动画框. 置类型 (我方炮弹, #我方炮弹类型值 )启动线程 (&播放游戏音效, #发射音效, )动画框. 自动前进 (我方炮弹, 5, 5, , , 真, 1, 真, , )攻击间隔控制 ()角度数组 = { 0, 90, 180, 270 }置随机数种子 ()动画框. 置角度 (物体标识值, 角度数组 [取随机数 (1, 4 )])|
查找数组成员索引 | 整数型 | | |
数组 | 整数型 | | | | 欲查找数组成员 | 整数型 | | | |
计次循环首 (取数组成员数 (数组 ), 次数 ) 如果真 (数组 [次数 ] = 欲查找数组成员 ) 返回 (次数 )  计次循环尾 ()返回 (0 )|
置坦克位置 | | | |
碰撞物体标识值 | 整数型 | | | | 碰撞前横坐标 | 整数型 | | | | 碰撞前纵坐标 | 整数型 | | | |
如果 (动画框. 取角度 (碰撞物体标识值 ) = 0 ) 动画框. 置物体位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标 + 5, 真) 如果 (动画框. 取角度 (碰撞物体标识值 ) = 180 )  动画框. 置物体位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标 - 5, 真)  如果 (动画框. 取角度 (碰撞物体标识值 ) = 270 )   动画框. 置物体位置 (碰撞物体标识值, 碰撞前横坐标 + 5, 碰撞前纵坐标, 真)   如果 (动画框. 取角度 (碰撞物体标识值 ) = 90 )    动画框. 置物体位置 (碰撞物体标识值, 碰撞前横坐标 - 5, 碰撞前纵坐标, 真)                 置随机数种子 ()置敌方坦克角度 (敌方坦克 )坦克随机角度时钟.时钟周期 = 取随机数 (1000, 13000 )动画框. 前进 (敌方坦克, 1 )
|
-
这个是:敌方坦克
-
这个是敌方坦克穿墙的一瞬间,它总是在自动前进的过程中一不小心就会穿墙
|