|
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 )
|
-
这个是:敌方坦克
-
这个是敌方坦克穿墙的一瞬间,它总是在自动前进的过程中一不小心就会穿墙
|