中国虚拟军事网(VME)- 专注于武装突袭系列虚拟军事游戏

 找回密码
 加入VME

QQ登录

只需一步,快速开始

搜索
查看: 1746|回复: 12

[讨论] 学术研究时间~~~关于 循环检测某条件~

[复制链接]
发表于 2012-9-30 22:16:50 | 显示全部楼层 |阅读模式
我编写的脚本需要用到

#rt
(g1 = true):goto "rt2";
goto "rt"
#rt2
.......

这样写脚本的时候执行起来就出现相当频繁的顿卡!一秒一次左右我搞了很久都不知道怎么办~奇怪的是用命令 distance 检测距离为条件的时候神奇的没有任何顿卡~~
后来我增加了一句改成
g1 = false
#rt
(g1 = true):goto "rt2";
goto "rt"
#rt2
.......
就完全不卡了???虽然解决了问题~但是我还是想求知一下为啥不定义g1 为 false程序就会卡得一死~???
发表于 2012-10-1 10:06:26 | 显示全部楼层

RE: 学术研究时间~~~关于 循环检测某条件~

楼主要检测什么内容?楼主还是快点转向sqf吧。
发表于 2012-10-1 17:07:49 | 显示全部楼层
本帖最后由 HoneyFox 于 2012-10-1 17:12 编辑

起码LZ你的代码里,=和==符号混淆了。一个是赋值运算符,一个是判断相等的运算符。
至于你说为啥会很卡很卡,大致原因可能有:
1. 你的g1变量之前有声明过么?没有的话,这个g1对象在每次你执行到这行的时候才会创建吧?我不清楚ArmA里的内存分配是怎么样的,也许卡顿就是在做诸如Garbage Collect的事情。
2. 因为你的死循环里完全没有sleep语句,导致运行该脚本始终不会转交给其他脚本运行。你可以考虑加入一些让该循环sleep的语句。

另外,(g1==true):goto "rt2"; 这个语句开头不需要一个问号么?我记得语句格式是 ? condition : action 啊。。。
 楼主| 发表于 2012-10-1 18:04:56 来自手机 | 显示全部楼层
HoneyFox 发表于 2012-10-1 17:07 起码LZ你的代码里,=和==符号混淆了。一个是赋值运算符,一个是判断相等的运算符。 至于你说为啥会很卡很卡 ...

对,我写帖子是确实打漏了?,但是我使用的脚本并没有忘记,另外=和==的问题我发现如果是检测数值必须用==但检测true和false用=也可以。按规范是不是==最好?另外估计就是事前没有定义g1为false所以循环去检测时出的问题。

点评

检测某个变量为true/false用=会导致该值被意外改变吧。。。起码按C语言的语法是会这样的。  发表于 2012-10-1 20:47
发表于 2012-10-1 22:20:44 | 显示全部楼层
=为赋予变量值,==为判断是否相同。两者完全不同。
 楼主| 发表于 2012-10-1 22:27:13 | 显示全部楼层
FFUR2007SLX2_5 发表于 2012-10-1 22:20
=为赋予变量值,==为判断是否相同。两者完全不同。

一个让我为脑袋拍砖的问题出现了~如果用==去检测是否为true~就会卡得一顿一顿的~~而且还不能顺利执行脚本~~

要是用?(g1 = true)~~脚本流畅执行~
发表于 2012-10-1 23:27:13 | 显示全部楼层
不使用?,而是用@。
@(g1):goto "rt2";

点评

这个可以用循环sleep方法等效表示,而且循环sleep方法更加灵活。  发表于 2012-10-1 23:35
 楼主| 发表于 2012-10-2 00:31:50 | 显示全部楼层
FFUR2007SLX2_5 发表于 2012-10-1 23:27
不使用?,而是用@。
@(g1):goto "rt2";

你的意思是规范化写法

?(g1 = true):goto。。。。。
是跟
@(g1):goto。。。。。。

的结果是一样?
发表于 2012-10-2 10:07:48 | 显示全部楼层
a2677998 发表于 2012-10-2 00:31
你的意思是规范化写法

?(g1 = true):goto。。。。。

单单这两句当然不一样。
上面那句要配合下面的goto "rt" 才会构成循环。好处是在循环过程中可以跑其它额外的代码。
@的话,只是简单的等待,等待过程中跑不了其它脚本。
 楼主| 发表于 2012-10-2 10:13:12 | 显示全部楼层
HoneyFox 发表于 2012-10-2 10:07
单单这两句当然不一样。
上面那句要配合下面的goto "rt" 才会构成循环。好处是在循环过程中可以跑其它额 ...

用goto还可以跑别的代码???怎么写?

另外我用@的话~~这样写

#go
@(g1):goto "rt"
goto "go"
#rt
还是这样写?
#go
@(g1):goto "rt"
#rt



发表于 2012-10-2 10:20:18 | 显示全部楼层
a2677998 发表于 2012-10-2 10:13
用goto还可以跑别的代码???怎么写?

另外我用@的话~~这样写

如果用@的话,直接
  1. @(g1);
  2. ...
复制代码
就行了吧。。。
发表于 2012-10-2 15:55:41 | 显示全部楼层
脚本一大堆英语 看着头晕
发表于 2012-10-2 15:56:39 | 显示全部楼层
楼主辛苦了
您需要登录后才可以回帖 登录 | 加入VME

本版积分规则

小黑屋|中国虚拟军事网

GMT+8, 2024-5-2 01:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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