找回密码
 点一下
楼主: ·

如何使镜头到目标的距离一直保持同一个数值?

[复制链接]
发表于 2011-7-27 19:32:05 | 显示全部楼层
对,判断单位所在点的地形进行计算
回复

使用道具 举报

发表于 2011-7-27 20:15:44 | 显示全部楼层
这个触发是以悬崖层面来进行判断,然后调整镜头距离和视觉高度的,当然,也可以用接近可破坏或单位为参考点。

开始我的思路是以地图某一个点(没有隆高地的地点)作为参考点,结果失败了,因为发一那样做必需要加入变量,所以我就没的做了。

期待楼做出更好的触发来,那么我也可以不必用到我到我的这触发了,毕竟限制太多了。以下是触发:

SD A
    事件
        玩家 - 玩家1(红色) 选择 一个单位
    条件
        (((触发单位) 的所有者) 等于 玩家1(红色)) and (((触发单位) 是 英雄) 等于 TRUE)
    动作
        镜头 - 锁定 玩家1(红色) 的镜头到 (触发单位), 偏移坐标(0.00, 0.00) ,使用 单位角度

-------------------------------------------------------------------------------

SD B
    事件
        单位 - 任意单位 发布指定点目标指令
        单位 - 任意单位 发布指定物体目标指令
    条件
        (((触发单位) 的所有者) 等于 玩家1(红色)) and (((触发单位) 是 英雄) 等于 TRUE)
    动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                (转换 (((触发单位) 的位置) 处的地形悬崖高度) 为实数) 大于或等于 3.00
            Then - 动作
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        (转换 (((触发单位) 的位置) 处的地形悬崖高度) 为实数) 大于或等于 4.00
                    Then - 动作
                        镜头 - 设置 玩家1(红色) 的镜头属性: Z轴旋转角度 为 ((触发单位) 的面向角度) ,使用时间 1.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: X轴旋转角度 为 -33.00 ,使用时间 0.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: 镜头距离 为 1000.00 ,使用时间 1.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: 镜头区域 为 1200.00 ,使用时间 1.00 秒
                        镜头 - 在必要时平移 玩家1(红色) 的镜头到 ((触发单位) 的位置) ,使用时间 0.50 秒
                    Else - 动作
                        镜头 - 设置 玩家1(红色) 的镜头属性: Z轴旋转角度 为 ((触发单位) 的面向角度) ,使用时间 1.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: X轴旋转角度 为 -31.00 ,使用时间 0.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: 镜头距离 为 900.00 ,使用时间 1.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: 镜头区域 为 1200.00 ,使用时间 1.00 秒
                        镜头 - 在必要时平移 玩家1(红色) 的镜头到 ((触发单位) 的位置) ,使用时间 0.50 秒
            Else - 动作
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        (转换 (((触发单位) 的位置) 处的地形悬崖高度) 为实数) 大于或等于 2.00
                    Then - 动作
                        镜头 - 设置 玩家1(红色) 的镜头属性: Z轴旋转角度 为 ((触发单位) 的面向角度) ,使用时间 1.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: X轴旋转角度 为 -29.00 ,使用时间 0.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: 镜头距离 为 850.00 ,使用时间 1.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: 镜头区域 为 1200.00 ,使用时间 1.00 秒
                        镜头 - 在必要时平移 玩家1(红色) 的镜头到 ((触发单位) 的位置) ,使用时间 0.50 秒
                    Else - 动作
                        镜头 - 设置 玩家1(红色) 的镜头属性: Z轴旋转角度 为 ((触发单位) 的面向角度) ,使用时间 1.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: X轴旋转角度 为 -27.00 ,使用时间 0.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: 镜头距离 为 800.00 ,使用时间 1.00 秒
                        镜头 - 设置 玩家1(红色) 的镜头属性: 镜头区域 为 1200.00 ,使用时间 1.00 秒
                        镜头 - 在必要时平移 玩家1(红色) 的镜头到 ((触发单位) 的位置) ,使用时间 0.50 秒

变化镜头距离和方向.w3x (19 KB, 下载次数: 3)
回复

使用道具 举报

 楼主| 发表于 2011-7-27 22:21:01 | 显示全部楼层
引用第22楼kwyj于2011-07-27 21:49发表的  :
不知道·在问什么……
你有玩过Diablo III Warcraft那地图吧,那你怎么会不懂呢,它的镜头距离不会因为地形的高低而自动变化
回复

使用道具 举报

 楼主| 发表于 2011-7-27 23:21:44 | 显示全部楼层
[jass]
scope Camlock initializer InitTrig

globals
    trigger CamLock
    integer INDEX = 0
    boolean array DEAD
    unit array HERO
    player array PLAYERS
    integer array IND
    location LOC
endglobals

private function Actions takes nothing returns nothing
local integer index = 0
local real x
local real y
local real z

loop
    exitwhen index == INDEX
    set x = GetUnitX(HERO[index])
    set y = GetUnitY(HERO[index])
    call MoveLocation(LOC,x,y)
    if GetLocalPlayer() == PLAYERS[index] then
        
        if DEAD[index] == false then
        set z = GetCameraField(CAMERA_FIELD_ZOFFSET)+300 - (256- GetLocationZ(LOC))-GetCameraTargetPositionZ()
        call SetCameraField(CAMERA_FIELD_ZOFFSET,z,0.5)
        call SetCameraPosition(x,y)
        endif
        call SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK,315,1.0)
        call SetCameraField(CAMERA_FIELD_ROTATION,140,1.0)
        call SetCameraField(CAMERA_FIELD_TARGET_DISTANCE,1850,1.0)
    endif
    set index = index + 1
endloop
endfunction

private function InitTrig takes nothing returns nothing
    set CamLock = CreateTrigger()
    set LOC = Location(0,0)
    set DEAD[0] = false
    set DEAD[1] = false
    set DEAD[2] = false
    set DEAD[3] = false
    set DEAD[4] = false
    set DEAD[5] = false
call TriggerRegisterTimerEvent(CamLock,0.017,true)
call TriggerAddAction(CamLock, function Actions)
endfunction


endscope
[/jass]

唔,谁认得这是什么东西,好奇特的语法
回复

使用道具 举报

发表于 2011-7-27 23:44:42 | 显示全部楼层
引用第24楼·于2011-07-27 23:21发表的  :
[jass]
scope Camlock initializer InitTrig

globals
    trigger CamLock
.......
你确定这个触发是对的吗。。。。
globals里的INDEX是0
然后Actions函数里的local index也是0
loop的第一个动作是exitwhen index == INDEX
那这个触发不就变成每0.017s触发且不做动作了吗。。。


INDEX应该是(玩家数-1)吧。。。


另外,什么叫什么语法?。。。这不就是个域+全局+初始化+动作吗……


对了。。DEAD这个变量,如果没有在别的地方会设置为true的话,那么在这里就是多余的,包括动作里的DEAD==false的判断都是多余的。。
不过我想应该是死亡时会设置成true的吧……


那些Camera函数我还未使用过。。所以不太清楚这个触发的作用到底是什么。。。
回复

使用道具 举报

 楼主| 发表于 2011-7-28 09:46:40 | 显示全部楼层
呃,好罢
回复

使用道具 举报

发表于 2011-8-20 13:56:49 | 显示全部楼层
  [s:191] 我最近也在纠结这方面问题,谢谢诸位啦
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 18:17 , Processed in 0.046422 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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