找回密码
 点一下
查看: 4337|回复: 38

刚学问题比较多,拜托大家解决下

[复制链接]
发表于 2008-1-27 14:28:33 | 显示全部楼层 |阅读模式
[codes=jass]local unit SpellUnit=GetTriggerUnit()
    local unit TargetUnit=GetSpellTargetUnit()
    local location Spellpoint = GetUnitLoc(TargetUnit)
    local player  SpellPlayer=GetOwningPlayer(SpellUnit)
    call CreateUnitAtLoc(SpellPlayer,'e000',SpellPoint,0)[/codes]
就这么点 他老说我的Spellpoint 没有申明?  我的申明不对吗?
发表于 2008-1-27 14:38:30 | 显示全部楼层
很明显,注意大小写………………
回复

使用道具 举报

 楼主| 发表于 2008-1-27 14:40:41 | 显示全部楼层
额 不好意思 我自己也看到 总是犯这种小问题
回复

使用道具 举报

 楼主| 发表于 2008-1-27 14:41:44 | 显示全部楼层
没有JavaBuding那些优秀的功能 好郁闷 找个错误都要自己一个一个看
回复

使用道具 举报

 楼主| 发表于 2008-1-27 14:46:56 | 显示全部楼层
对了
[codes=jass]local unit HelpUnit=GetLastCreatedUnit()[/codes]
GetLastCreatedUnit() 是个BJ方法 返回的单位不能给局部变量用?
我仿教程
local unit HelpUnit=CreateUnitAtLoc(SpellPlayer,'e000',SpellPoint,0)
这样写对了吧
回复

使用道具 举报

发表于 2008-1-27 14:48:27 | 显示全部楼层
回ls:嗯~~

java………………我是用eclipse的………………
回复

使用道具 举报

发表于 2008-1-27 15:13:30 | 显示全部楼层
没有任何说法说bj变量的返回值不能赋给局部变量的~~
回复

使用道具 举报

发表于 2008-1-27 15:15:07 | 显示全部楼层
额,刚发现4楼有这句话………………

如果说是CreateNUnitsAtLoc的话,这个函数返回的是group额………………
回复

使用道具 举报

 楼主| 发表于 2008-1-27 15:18:50 | 显示全部楼层
[codes=jass]UnitRemoveBuffs(unit whichunit,boolean removepositive,boolean removenegative)[/codes]
这个函数是做什么的? 我把我T转J来看 他就多了这个东西 单位移除BUFF? 最无法理解后面那两个布尔参数 翻译过来是移除真实的 和移除负面的
我放在个随机整数的IF ELSE里面 THEN那个是(技能目标单位,TURE,FALSE)   ELSE是(技能目标单位,FALSE,TURE)
刚刚布尔写错不好意思
回复

使用道具 举报

发表于 2008-1-27 15:21:05 | 显示全部楼层
引用第7楼zhuzeitou于2008-01-27 15:15发表的  :
额,刚发现4楼有这句话………………

如果说是CreateNUnitsAtLoc的话,这个函数返回的是group额………………


否~~即使是CreateNUnitsAtLoc()~~

GetLastCreatedUnit()返回的依然是单个单位~~也就是所创造出的最后一个单位~~
回复

使用道具 举报

发表于 2008-1-27 15:22:44 | 显示全部楼层
引用第8楼hunluan89于2008-01-27 15:18发表的  :
[codes=jass]UnitRemoveBuffs(unit whichunit,boolen removepositive,boolen removenegative)[/codes]
这个函数是做什么的? 我把我T转J来看 他就多了这个东西 单位移除BUFF? 最无法理解后面那两个布尔参数 翻译过来是移除真实的 和移除负面的
我放在个随机整数的IF ELSE里面 THEN那个是(技能目标单位,TURE,FALSE)   ELSE是(技能目标单位,FALSE,TURE)

后两个参数一个是要给出是正面buff还是负面buff~~

简单地说~~前一个参数为true则删除所有正面buff~~后一个参数为true则删除所有负面buff~~然后两个都为true则不论正负全部删除~~
回复

使用道具 举报

 楼主| 发表于 2008-1-27 15:31:07 | 显示全部楼层
你们争论那个问题
[codes=jass]call CreateNUnitsAtLoc(1,'e000',SpellPlayer,SpellPoint,0)
   local unit a=GetLastCreatedUnit()[/codes]
这样写是句法错误 上面是弄个组出来 下面是一个是要求单位 连着放起就是错的 我把上面一句改成返回单位的就对了
回复

使用道具 举报

发表于 2008-1-27 15:37:31 | 显示全部楼层
jass和java不一样额,局部变量必须声明在顶部………………
回复

使用道具 举报

发表于 2008-1-27 15:39:25 | 显示全部楼层
引用第11楼hunluan89于2008-01-27 15:31发表的  :
你们争论那个问题
[codes=jass]call CreateNUnitsAtLoc(1,'e000',SpellPlayer,SpellPoint,0)
   local unit a=GetLastCreatedUnit()[/codes]
这样写是句法错误 上面是弄个组出来 下面是一个是要求单位 连着放起就是错的 我把上面一句改成返回单位的就对了


先创造组在获取GetLastCreatedUnit()这样写没有任何语法错误~~

要我说几遍呢?~~

你的错误在于local声明没有写在最前~~而不是用了GetLastCreatedUnit()所导致的~~

不管前文如何~~GetLastCreatedUnit()返回的类型依然是unit~~

该函数的内容只有一句~~
[jass]
function GetLastCreatedUnit takes nothing returns unit
    return bj_lastCreatedUnit
endfunction
[/jass]

也就是获得bj_lastCreatedUnit这个unit类型变量的值

而CreateNUnitsAtLoc()本身不会对这个变量赋值~~

因为它的内容是
[jass]
function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group
    call GroupClear(bj_lastCreatedGroup)
    loop
        set count = count - 1
        exitwhen count < 0
        call CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face)
        call GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
    endloop
    return bj_lastCreatedGroup
endfunction
[/jass]

它创造出来的单位组是赋给bj_lastCreatedGroup的而不是bj_lastCreatedUnit~~

而一次创造多个单位是靠循环调用CreateUnitAtLocSaveLast()这个函数实现的~~而CreateUnitAtLocSaveLast()才会给bj_lastCreatedUnit赋值~~

它是每创造一个单位赋值一次~~因此总是只会将最后创建的那个赋给bj_lastCreatedUnit~~
[jass]
function CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit
    if (unitid == 'ugol') then
        set bj_lastCreatedUnit = CreateBlightedGoldmine(id, GetLocationX(loc), GetLocationY(loc), face)
    else
        set bj_lastCreatedUnit = CreateUnitAtLoc(id, unitid, loc, face)
    endif

    return bj_lastCreatedUnit
endfunction
[/jass]


这根本没有任何争论的余地~~GetLastCreatedUnit()永远不可能返回一个组~~而且你就算把上一句改为CreateUnitAtLocSaveLast()也是无意义的~~我包管你还是保存不了~~因为问题本来就出在local上而不是GetLastCreatedUnit()返回的类型~~
回复

使用道具 举报

 楼主| 发表于 2008-1-27 16:00:23 | 显示全部楼层
晕死 还要开始就把所有的局部变量全部申明 后面在初始化...
回复

使用道具 举报

发表于 2008-1-27 16:01:08 | 显示全部楼层
申明一定要在开头,初始化也可以在申明是一起做了………………
回复

使用道具 举报

发表于 2008-1-27 16:01:43 | 显示全部楼层
引用第14楼hunluan89于2008-01-27 16:00发表的  :
晕死 还要开始就把所有的局部变量全部申明 后面在初始化...

你可以在声明的同时初始化~~只要初始化语句和声明写成一句就可以~~
回复

使用道具 举报

 楼主| 发表于 2008-1-27 16:22:09 | 显示全部楼层
你看我1楼不就是这样做的吗  
为什么我我创建触发器gg_trg_zrcd_1_______u 后,在TriggerRegisterAnyUnitEventBJ这个地方它说我的gg_trg_zrcd_1_______u 没有申明呢?
[codes=jass]function InitTrig_zrcd_1_______u takes nothing returns nothing
    set gg_trg_zrcd_1_______u = CreateTrigger( )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_zrcd_1_______u, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_zrcd_1_______u, Condition( function Trig_zrcd_1_______u_Condition ) )
    call TriggerAddAction( gg_trg_zrcd_1_______u, function Trig_zrcd_1_______u_Actions )
endfunction
[/codes]
回复

使用道具 举报

发表于 2008-1-27 16:27:32 | 显示全部楼层
你确实没有声明啊~~

就算不是局部变量~~起码也得
trigger gg_trg_zrcd_1_______u = CreateTrigger( )吧?
回复

使用道具 举报

 楼主| 发表于 2008-1-27 16:40:49 | 显示全部楼层
非常感谢两位耐心的帮忙 第一个JASS总算做好了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 03:45 , Processed in 0.118491 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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