开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 1336|回复: 1
收起左侧

[精币悬赏] 易语言动画框碰撞问题,求大神

[复制链接]
结帖率:0% (0/1)
发表于 2018-8-17 15:02:32 | 显示全部楼层 |阅读模式   河南省濮阳市
10精币
我的问题是:敌方坦克在自动前进的过程中总是不时地就穿墙而过,我使用过多线程处理碰撞事件,但是还是没有解决,下面是我的全部代码,求大神帮忙,这个问题已经困扰我两年了,在16年的时候我也在精易论坛发过同样的帖子但是没有解决,这次希望大神帮帮忙
这个是我在16年发的帖子


这个是敌方坦克碰撞以后的处理代码,我把这三段代码放到最前面,后面是全部代码:
下面是碰撞到物体子程序:
.版本 2
.支持库 iext2

.子程序 _动画框_碰撞到物体
.参数 碰撞物体标识值, 整数型
.参数 碰撞前横坐标, 整数型
.参数 碰撞前纵坐标, 整数型
.参数 被碰撞物体标识值, 整数型

.如果真 (碰撞物体标识值 = 我方坦克)
    置坦克位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标)
    返回 ()
.如果真结束
.如果真 (动画框.取附加文本 (碰撞物体标识值) = “炮弹” 且 动画框.取类型 (被碰撞物体标识值) = #障碍物类型值)
    动画框.销毁物体 (被碰撞物体标识值)
    返回 ()
.如果真结束
.如果真 (动画框.取附加文本 (碰撞物体标识值) = “敌方坦克”)
    置坦克位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标)
    置敌方坦克角度 (碰撞物体标识值)
    返回 ()

下面是置坦克位置子程序:

.版本 2
.支持库 iext2

.子程序 置坦克位置
.参数 碰撞物体标识值, 整数型
.参数 碰撞前横坐标, 整数型
.参数 碰撞前纵坐标, 整数型

.如果 (动画框.取角度 (碰撞物体标识值) = 0)
    动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标 + 5, 真)
.否则
    .如果 (动画框.取角度 (碰撞物体标识值) = 180)
        动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标 - 5, 真)
    .否则
        .如果 (动画框.取角度 (碰撞物体标识值) = 270)
            动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标 + 5, 碰撞前纵坐标, 真)
        .否则
            .如果 (动画框.取角度 (碰撞物体标识值) = 90)
                动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标 - 5, 碰撞前纵坐标, 真)
            .否则

            .如果结束

        .如果结束

    .如果结束

.如果结束

下面是置对方坦克角度子程序
.版本 2
.支持库 iext2

.子程序 置敌方坦克角度
.参数 物体标识值, 整数型
.局部变量 角度数组, 整数型, , "4"

角度数组 = { 0, 90, 180, 270 }
置随机数种子 ()
动画框.置角度 (物体标识值, 角度数组 [取随机数 (1, 4)])


以下是全部代码:
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
我方坦克整数型  
我方坦克速度整数型  
我方炮弹整数型  
敌方坦克整数型  
红砖整数型  
攻击间隔标记逻辑型  
子弹爆炸图整数型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
css整数型 
置随机数种子 ()
计次循环首 (10, )
css = css + 20
红砖 = 动画框.创建物体 (动画物体, css, 50, , “红砖”)
动画框.置图片 (红砖, #图_红砖, )
动画框.置类型 (红砖, #障碍物类型值 )
计次循环尾 ()
计次循环首 (10, )
css = css + 30
红砖 = 动画框.创建物体 (动画物体, css, 300, , “红砖”)
动画框.置图片 (红砖, #图_红砖, )
动画框.置类型 (红砖, #障碍物类型值 )
计次循环尾 ()
我方坦克速度 = 1
攻击间隔标记 = 真
创建我方坦克 ()
创建敌方坦克 ()
坦克随机角度时钟.时钟周期 = 取随机数 (1000, 13000)
子程序名返回值类型公开备 注
_动画框_监视键被按下  
参数名类 型参考可空数组备 注
键代码整数型
功能键状态整数型
如果真 (键代码 = #W键 )
动画框.置角度 (我方坦克, 0)
动画框.前进 (我方坦克, 我方坦克速度)
如果真 (键代码 = #S键 )
动画框.置角度 (我方坦克, 180)
动画框.前进 (我方坦克, 我方坦克速度)
如果真 (键代码 = #A键 )
动画框.置角度 (我方坦克, 270)
动画框.前进 (我方坦克, 我方坦克速度)
如果真 (键代码 = #D键 )
动画框.置角度 (我方坦克, 90)
动画框.前进 (我方坦克, 我方坦克速度)

子程序名返回值类型公开备 注
创建我方坦克  
' 我方坦克 = 动画框.创建物体 (动画物体, 动画框.取用户区宽度 () ÷ 2 - 20, 动画框.取用户区高度 () - 55, , “我方坦克”)
我方坦克 = 动画框.创建物体 (动画物体, 50, 0, , )
动画框.置图片 (我方坦克, #图_我方坦克, )
动画框.缩放 (我方坦克, 500, 500)
动画框.置类型 (我方坦克, #我方坦克类型值 )
动画框.添加监视键 (1, #W键, #S键, #A键, #D键 )
子程序名返回值类型公开备 注
创建敌方坦克  
敌方坦克 = 动画框.创建物体 (动画物体, 0, 0, , “敌方坦克”)
动画框.置图片 (敌方坦克, #图_1分坦克, )
动画框.置类型 (敌方坦克, #敌方坦克类型值 )
动画框.置角度 (敌方坦克, 180)
' 动画框.自动前进 (敌方坦克, 1, 1, , , , , , , )
子程序名返回值类型公开备 注
_动画框_碰撞到边界逻辑型 
参数名类 型参考可空数组备 注
物体标识值整数型
碰撞前横坐标整数型
碰撞前纵坐标整数型
边界类型整数型
如果真 (动画框.取附加文本 (物体标识值)“我方坦克”)
' 动画框.置物体位置 (物体标识值, 碰撞前横坐标, 碰撞前纵坐标, )
置坦克位置 (物体标识值, 碰撞前横坐标, 碰撞前纵坐标)
如果真 (动画框.取附加文本 (物体标识值)“敌方坦克”)
置坦克位置 (物体标识值, 碰撞前横坐标, 碰撞前纵坐标)
置敌方坦克角度 (物体标识值)

子程序名返回值类型公开备 注
_动画框_碰撞到物体  
参数名类 型参考可空数组备 注
碰撞物体标识值整数型
碰撞前横坐标整数型
碰撞前纵坐标整数型
被碰撞物体标识值整数型
如果真 (碰撞物体标识值 = 我方坦克)
置坦克位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标)
返回 ()
如果真 (动画框.取附加文本 (碰撞物体标识值)“炮弹” 动画框.取类型 (被碰撞物体标识值)#障碍物类型值 )
动画框.销毁物体 (被碰撞物体标识值)
返回 ()
如果真 (动画框.取附加文本 (碰撞物体标识值)“敌方坦克”)
置坦克位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标)
置敌方坦克角度 (碰撞物体标识值)
返回 ()

子程序名返回值类型公开备 注
_动画框_按下某键逻辑型 
参数名类 型参考可空数组备 注
键代码整数型
功能键状态整数型
如果真 (键代码 = #回车键 攻击间隔标记)
创建我方炮弹 ()

子程序名返回值类型公开备 注
攻击间隔控制  
延迟 (200)
攻击间隔标记 = 真
子程序名返回值类型公开备 注
_动画框_物体将销毁  
参数名类 型参考可空数组备 注
物体标识值整数型
如果真 (动画框.取附加文本 (物体标识值)“炮弹”)
销毁炮弹 (物体标识值)

子程序名返回值类型公开备 注
播放游戏音效  
参数名类 型参考可空数组备 注
音效标识整数型
如果真 (音效标识 = #炮弹爆炸音效 )
播放音乐 ( #声_炮弹爆炸, )
如果真 (音效标识 = #发射音效 )
播放音乐 ( #声_发射, )

子程序名返回值类型公开备 注
销毁炮弹  
参数名类 型参考可空数组备 注
物体标识值整数型
如果真 (动画框.取附加文本 (物体标识值)“炮弹”)
判断 (动画框.取角度 (物体标识值) = 0)
子弹爆炸图 = 动画框.创建物体 (动画物体, 动画框.取物体左边 (物体标识值), 动画框.取物体顶边 (物体标识值) - 15, , )
判断 (动画框.取角度 (物体标识值) = 180)
子弹爆炸图 = 动画框.创建物体 (动画物体, 动画框.取物体左边 (物体标识值), 动画框.取物体顶边 (物体标识值) + 15, , )
判断 (动画框.取角度 (物体标识值) = 90)
子弹爆炸图 = 动画框.创建物体 (动画物体, 动画框.取物体左边 (物体标识值) + 15, 动画框.取物体顶边 (物体标识值), , )
判断 (动画框.取角度 (物体标识值) = 270)
子弹爆炸图 = 动画框.创建物体 (动画物体, 动画框.取物体左边 (物体标识值) - 15, 动画框.取物体顶边 (物体标识值), , )


动画框.置图片 (子弹爆炸图, #图_炮弹爆炸, )
动画框.播放动画 (子弹爆炸图, 1, 真, , )
启动线程 (&播放游戏音效, #炮弹爆炸音效, )

子程序名返回值类型公开备 注
创建我方炮弹  
攻击间隔标记 = 假
我方炮弹 = 动画框.创建物体 (动画物体, 动画框.取物体左边 (我方坦克) + 14.5, 动画框.取物体顶边 (我方坦克) + 15, , “炮弹”)
动画框.置图片 (我方炮弹, #图_炮弹, )
动画框.置角度 (我方炮弹, 动画框.取角度 (我方坦克))
动画框.置类型 (我方炮弹, #我方炮弹类型值 )
启动线程 (&播放游戏音效, #发射音效, )
动画框.自动前进 (我方炮弹, 5, 5, , , 真, 1, 真, , )
攻击间隔控制 ()
子程序名返回值类型公开备 注
置敌方坦克角度  
参数名类 型参考可空数组备 注
物体标识值整数型
变量名类 型静态数组备 注
角度数组整数型4
角度数组 = { 0, 90, 180, 270 }
置随机数种子 ()
动画框.置角度 (物体标识值, 角度数组 [取随机数 (1, 4)])
子程序名返回值类型公开备 注
查找数组成员索引整数型 
参数名类 型参考可空数组备 注
数组整数型
欲查找数组成员整数型
变量名类 型静态数组备 注
次数整数型 
计次循环首 (取数组成员数 (数组), 次数)
如果真 (数组 [次数] = 欲查找数组成员)
返回 (次数)

计次循环尾 ()
返回 (0)
子程序名返回值类型公开备 注
置坦克位置  
参数名类 型参考可空数组备 注
碰撞物体标识值整数型
碰撞前横坐标整数型
碰撞前纵坐标整数型
如果 (动画框.取角度 (碰撞物体标识值) = 0)
动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标 + 5, )
如果 (动画框.取角度 (碰撞物体标识值) = 180)
动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标, 碰撞前纵坐标 - 5, )
如果 (动画框.取角度 (碰撞物体标识值) = 270)
动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标 + 5, 碰撞前纵坐标, )
如果 (动画框.取角度 (碰撞物体标识值) = 90)
动画框.置物体位置 (碰撞物体标识值, 碰撞前横坐标 - 5, 碰撞前纵坐标, )






子程序名返回值类型公开备 注
_坦克随机角度时钟_周期事件  
置随机数种子 ()
置敌方坦克角度 (敌方坦克)
坦克随机角度时钟.时钟周期 = 取随机数 (1000, 13000)
子程序名返回值类型公开备 注
_时钟1_周期事件  
动画框.前进 (敌方坦克, 1)


i支持库列表   支持库注释   
iext2扩展界面支持库二
spec特殊功能支持库
EThread多线程支持库


这个是:敌方坦克

这个是:敌方坦克

这个是敌方坦克穿墙的一瞬间,它总是在自动前进的过程中一不小心就会穿墙

这个是敌方坦克穿墙的一瞬间,它总是在自动前进的过程中一不小心就会穿墙
结帖率:100% (4/4)

签到天数: 18 天

发表于 2022-3-17 10:13:21 | 显示全部楼层   河北省邢台市
又过了四年了
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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