找回密码
 点一下
查看: 2640|回复: 7

[已解决]大侠高手帮看下我的自定义函数

[复制链接]
发表于 2008-11-13 00:19:11 | 显示全部楼层 |阅读模式
[codes=jass]
//根据中点获得最接近指定点的单位
function GetUnitOfLate takes group whichgroup, location center , real radius returns unit
local unit Enum
local real dis=0
local real x=GetLocationX(center)
local real y=GetLocationY(center)
local unit Runit
local integer i
if(whichgroup==null)then
return null
endif
//测试用的 判断单位组是不是为空
call BJDebugMsg(I2S(CountUnitsInGroup(whichgroup)))
loop
//同上
call BJDebugMsg(I2S(CountUnitsInGroup(whichgroup)))
//循环获得单位组中的第一个单位
set Enum=FirstOfGroup(whichgroup)                                    
exitwhen Enum==null
//也是循环用的 发现他一次也没打印
call BJDebugMsg(I2S(i))  
//获得当前单位与中心点的距离的自定义函数                                                         
set dis=DistanceBetweenPosition(x,y,GetUnitX(Enum),GetUnitY(Enum))  
//判断当前单位与点的距离是否小于最小的与点的距离              
if(dis<radius)then
/如果距离小于最短于点距离就设置他为最短距离                                                                        
set radius=dis  
//设置为返回单位
set Runit=Enum  
//从单位组中把单位灭了                                                                        
call GroupRemoveUnit(whichgroup,Runit)                          
endif
set i=i+1
endloop
return Runit
endfunction
[/codes]
写了一个自定义函数 获得一个与单位组中与指定点距离最近的单位 不知道怎么的没成功
开关WE 很多次了 自己也没看出什么问题 可能脑子秀逗了 单位组中明明有6个单位 他楞就是一次也不循环
现在更神奇了 i 居然冒出了300多...

两个6都打印出来了

两个6都打印出来了
发表于 2008-11-13 09:51:44 | 显示全部楼层
set Enum=FirstOfGroup(whichgroup)                                                                       
exitwhen Enum==null
call GroupRemoveUnit(whichgroup,Runit)   

粗心大意了。
回复

使用道具 举报

发表于 2008-11-13 10:23:58 | 显示全部楼层
无论组里面的这个单位与点的距离是否小于指定的数值,你都得把它从组里面拿出去,要不没有办法循环到组里面的每一个单位。你把它放到if语句中也就是说如果组里面的第一个单位一开始就没有小于指定值的时候,那么你每次选取的都是它,它就开始无限制的循环了
把if语句中的GroupRemoveUnit删除掉
set Enum=FirstOfGroup(whichgroup)                                                                     
exitwhen Enum==null
set dis=DistanceBetweenPosition(x,y,GetUnitX(Enum),GetUnitY(Enum))   
后面添加上
call GroupRemoveUnit(whichgroup, Enum)
回复

使用道具 举报

 楼主| 发表于 2008-11-13 17:37:04 | 显示全部楼层
2楼没看我把Runit=Enum了吗 单位是引用类型 传的是指针 单位组移除是一样的
3楼确实说对了 但是 他还是没有循环 i=0时都没有打印出来..
早上电脑拿去修了 仍在测试中
回复

使用道具 举报

 楼主| 发表于 2008-11-13 17:53:37 | 显示全部楼层
我极其的无语 我把 integer 变量 "i"  的初始值设为了0 他就OK了....  
难道这个integer  还真是C里面的 Integer 类型 初始值是NULL 而不是0
回复

使用道具 举报

发表于 2008-11-14 13:04:01 | 显示全部楼层
你说对了。jass是从lua扩展来的,lua里面的值初始都是nil,就是null
回复

使用道具 举报

恶声恶气 该用户已被删除
发表于 2009-1-12 13:11:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2009-7-20 17:32:25 | 显示全部楼层
引用第5楼eff于2008-11-14 13:04发表的  :
你说对了。jass是从lua扩展来的,lua里面的值初始都是nil,就是null
你说过boolean之后,试了下
integer array发现也是不赋值就全是0,但如果integer不赋值使用就会终止代码
由此推测所有array的默认值均是false/0/""/null
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-4 16:37 , Processed in 0.060704 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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