找回密码
 点一下
楼主: hunluan89

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

[复制链接]
 楼主| 发表于 2008-1-27 16:45:06 | 显示全部楼层
对了 触发器是用全局变量好还是局部变量好啊  我想是全局吧
回复

使用道具 举报

发表于 2008-1-27 16:45:49 | 显示全部楼层
引用第20楼hunluan89于2008-01-27 16:45发表的  :
对了 触发器是用全局变量好还是局部变量好啊  我想是全局吧

这个要看情况的哦~~
一般的全局就可以了
回复

使用道具 举报

 楼主| 发表于 2008-1-27 17:35:55 | 显示全部楼层
数组该如何申明啊 我用C和JAVA的申明都不对
回复

使用道具 举报

发表于 2008-1-27 17:39:23 | 显示全部楼层
unit array u
回复

使用道具 举报

 楼主| 发表于 2008-1-27 17:40:40 | 显示全部楼层
不需要指定大小吗?
回复

使用道具 举报

发表于 2008-1-27 17:52:10 | 显示全部楼层
引用第24楼hunluan89于2008-01-27 17:40发表的  :
不需要指定大小吗?

貌似不需要………………
回复

使用道具 举报

发表于 2008-1-27 17:52:42 | 显示全部楼层
jass的数组元素固定为8192个~~也就是下标上限是8191~~

不用定义容量~~
回复

使用道具 举报

 楼主| 发表于 2008-1-27 18:26:14 | 显示全部楼层
申明全局变量的
[codes=jass]
globals
    trigger udg_gg_trg_tztj_1_______u=CreateTrigger( )
endglobals
[/codes]
应该放在WE的什么地方啊 我做了两个J  把触发器都定义成全局变量后它就说找不到全局变量了
回复

使用道具 举报

发表于 2008-1-27 18:57:32 | 显示全部楼层
全局变量是统一声明的,你可以把地图的j导出看下就知道了
回复

使用道具 举报

 楼主| 发表于 2008-1-27 19:25:55 | 显示全部楼层
统一声明... 那我想保留一部分T 加入JASS 我如何声明触发器类型全局变量 可以导出可不可以导入啊
回复

使用道具 举报

发表于 2008-1-27 19:27:39 | 显示全部楼层
全局变量么就和一般全局变量一样用触发编辑器声明嘛~~
回复

使用道具 举报

 楼主| 发表于 2008-1-27 19:52:30 | 显示全部楼层
寒哦 为什么我的JassCraft 的魔兽地图编辑器相关功能都不能用啊 要不我导出脚本再导入进去
回复

使用道具 举报

 楼主| 发表于 2008-1-27 19:59:37 | 显示全部楼层
郁闷 把J所在的触发名称直接改J要用的触发名称 它就自动生成全局变量了  连udg前缀都不给我加
回复

使用道具 举报

 楼主| 发表于 2008-1-27 20:24:40 | 显示全部楼层
[codes=jass]
function Trig_tztj_1_______u_Conditions takes nothing returns boolean
    if ( GetSpellAbilityId() == 'A012'  ) then
        return true
    endif
    return false
endfunction

function Trig_tztj_1_______u_Actions takes nothing returns nothing
    local unit SpellUnit=GetTriggerUnit()
    local location SUnitPoint = GetUnitLoc(SpellUnit)
    local location SpellPoint= GetSpellTargetLoc()
    local unit array LastUnit
    local integer i=0
    local integer j=0
    local location array obturate
    local real  angle=AngleBetweenPoints(SUnitPoint,SpellPoint)
    local player SpellPlayer=GetOwningPlayer(SpellUnit)
    loop
        set i=i+1
        exitwhen i>32
        set  obturate = PolarProjectionBJ(SUnitPoint, ( 32.00 * I2R(i) ),angle)
        call CreateUnitAtLoc( SpellPlayer, 'e00B',obturate,0 )
        set  LastUnit = GetLastCreatedUnit()
        call AddSpecialEffectLoc( "Objects\\\\Spawnmodels\\\\Undead\\\\ImpaleTargetDust\\\\ImpaleTargetDust.mdl" ,obturate)
        call DestroyEffect( GetLastCreatedEffectBJ() )
        call SetTerrainPathableBJ(obturate, PATHING_TYPE_ANY, false )
    endloop
    call RemoveLocation( SUnitPoint )
    call RemoveLocation( SpellPoint )
    call TriggerSleepAction( 8.00 )
    loop
        set j=j+1
        exitwhen j > 33
        call RemoveUnit( LastUnit[j] )
        call SetTerrainPathableBJ( obturate[j], PATHING_TYPE_ANY, true )
        call RemoveLocation( obturate[j] )      
        set LastUnit[j]=null
    endloop
    set SpellUnit=null
    set angle=0
    set SpellPlayer=null
endfunction

//===========================================================================
function InitTrig_tztj_1_______u takes nothing returns nothing
    set  gg_trg_tztj_1_______u=CreateTrigger( )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_tztj_1_______u, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_tztj_1_______u, Condition( function Trig_tztj_1_______u_Conditions ) )
    call TriggerAddAction( gg_trg_tztj_1_______u, function Trig_tztj_1_______u_Actions )
endfunction[/codes]
这个是模仿DOTA神牛的拦路 但是 8秒过后路是可以走了 为什么创建的单位没有删除掉呢?删除和清空是
[codes=jass]
call RemoveUnit( LastUnit[j] )      
set LastUnit[j]=null
[/codes]
这两段 我语法检查了 没错啊 但是创建出来的单位就是不删除
回复

使用道具 举报

发表于 2008-1-27 21:18:26 | 显示全部楼层
[codes=jass]call CreateUnitAtLoc( SpellPlayer, 'e00B',obturate,0 )
set   LastUnit = GetLastCreatedUnit()[/codes]

这两句写成
[codes=jass]set   LastUnit = CreateUnitAtLoc( SpellPlayer, 'e00B',obturate,0 )[/codes]
试试看呢?

CreateUnitAtLoc是不改变bj_lastCreatedUnit的
回复

使用道具 举报

 楼主| 发表于 2008-1-27 21:55:43 | 显示全部楼层
总算找到原因了要
set   LastUnit=CreateUnitAtLoc( SpellPlayer, 'e00B',obturate,0 )
CreateUnitAtLoc() 函数返回个单位 直接赋值就得了 但是为什么LastUnit= LastUnit = GetLastCreatedUnit()   无法获得最后创建的单位呢 我用IF试了 LastUnit[1~32]是空的
回复

使用道具 举报

发表于 2008-1-27 21:59:37 | 显示全部楼层
引用第35楼hunluan89于2008-01-27 21:55发表的  :
总算找到原因了要
set   LastUnit=CreateUnitAtLoc( SpellPlayer, 'e00B',obturate,0 )
CreateUnitAtLoc() 函数返回个单位 直接赋值就得了 但是为什么LastUnit= LastUnit = GetLastCreatedUnit()   无法获得最后创建的单位呢 我用IF试了 LastUnit[1~32]是空的

恩,在34楼我说过了,CreateUnitAtLoc是不改变bj_lastCreatedUnit的
而GetLastCreatedUnit就是返回bj_lastCreatedUnit的
回复

使用道具 举报

发表于 2008-1-27 22:21:24 | 显示全部楼层
哦..原来是这样- -
回复

使用道具 举报

发表于 2008-1-28 00:26:16 | 显示全部楼层
有时间还是要看一下BLIZZARD.J。如果能看懂,对初学者,不管是用J还是用T都会有莫大的帮助的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 19:19 , Processed in 0.189883 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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