利用jass语言编写当多个单位同时受到一个单位的攻击时,把在0.1秒之内对相应单位造成的伤害值之和利用漂浮文字在相应单位的位置显示出来
时间: 2023-09-11 07:05:09 浏览: 139
jquery多个同时倒计时(精确到0.1秒)
5星 · 资源好评率100%
### 回答1:
使用 Jass 语言,可以在单位受到攻击时使用函数 "TimerStart" 开始计时,并在计时结束后使用函数 "CreateFloatText" 在单位位置显示伤害值之和。具体实现方法如下:
1. 在单位受到攻击时,使用 "TimerStart" 函数开始计时。
2. 使用 "Event" 函数监听计时器结束事件。
3. 在计时器结束事件中,使用 "CreateFloatText" 函数在单位位置显示伤害值之和。
示例代码如下:
```
// 计时器结束事件
function MyTimerEnd takes nothing returns nothing
local unit u = GetExpiredTimer()
local real damage = GetUnitState(u, UNIT_STATE_LIFE)
local string text = R2S(damage)
CreateFloatText(text, u, 0.0, 0.0)
endfunction
// 单位受到攻击事件
function MyUnitTakeDamage takes unit attacker, unit target, real damage returns nothing
TimerStart(0.1, false, function MyTimerEnd)
endfunction
```
上面的代码展示了如何在单位受到攻击时开始计时,并在计时结束后显示伤害值之和。
### 回答2:
利用JASS语言编写当多个单位同时受到一个单位的攻击时,可以通过以下方式将在0.1秒内对相应单位造成的伤害值之和利用漂浮文字显示出来。
首先,需要定义一个全局变量来存储总伤害值。我们可以称之为totalDamage。
接下来,在攻击单位的攻击伤害函数中,将对受攻击单位造成的伤害值累加到totalDamage变量中。可以通过如下代码实现:
function onAttackDamageTakes(unit attacker, unit target, real damage)
set totalDamage = totalDamage + damage
endfunction
然后,在游戏进行的每一帧中,检查是否有单位受到攻击。可以通过使用Trigger来实现:
local trigger t
function checkDamageTakenActions()
local unit target = GetTriggerUnit()
local real damage = GetEventDamage()
if IsUnitAlly(target, GetOwningPlayer(attacker)) and damage > 0 then
set totalDamage = totalDamage + damage
end
endfunction
set t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DAMAGED)
call TriggerAddAction(t, checkDamageTakenActions)
最后,在单位的位置显示伤害值的函数中,我们可以使用漂浮文字效果来显示totalDamage。可以通过如下代码实现:
function displayDamageTaken(unit target)
local string s = I2S(R2I(totalDamage)) + "伤害"
local real x = GetUnitX(target)
local real y = GetUnitY(target)
call DisplayTextToPlayer(GetOwningPlayer(target), x, y, s)
endfunction
在需要显示伤害值的地方,调用displayDamageTaken函数,并传入对应的受攻击单位作为参数即可。
通过以上代码,可以实现在单位受到攻击时,将0.1秒内对相应单位造成的伤害值之和利用漂浮文字显示在相应单位的位置上。
### 回答3:
在JASS语言中,可以使用触发器和浮动文字效果来实现当多个单位同时受到一个单位的攻击时,将0.1秒内对相应单位造成的伤害值之和显示在相应单位位置上。
首先,我们可以创建一个触发器,用于监听当受到攻击的单位受到伤害时的事件。触发器可以使用`EVENT_PLAYER_UNIT_DAMAGED`事件来监听受到攻击的单位,并且使用`TriggerRegisterAnyUnitEventBJ`函数将该事件与触发器绑定。
接着,在触发器中,我们可以创建一个循环,遍历所有受到伤害的单位,将每个单位在0.1秒内受到的伤害值累加起来。这里可以使用函数`GetEventDamage()`来获得受到伤害的数量,再使用全局变量或自定义数组来累加伤害值。
最后,我们可以使用浮动文字效果`SetTextTagText`和`SetTextTagPos`来在相应单位的位置显示伤害值之和。可以使用`SetTextTagSuspended`函数来设置浮动文字在0.1秒后自动消失,以实现按照时间显示。
总结起来,我们需要创建触发器来监听受到攻击的单位受到伤害的事件,然后在触发器中循环计算0.1秒内对相应单位的伤害之和,并使用浮动文字效果在相应单位的位置显示出伤害值。
示例代码如下:
```
local real damageSum
function ShowDamageSum()
local unit damagedUnit = GetTriggerUnit()
local real damage = GetEventDamage()
damageSum = damageSum + damage
local integer playerId = GetPlayerId(GetOwningPlayer(damagedUnit))
-- 在damagedUnit的位置上显示浮动文字
local textTag tt = CreateTextTag()
SetTextTagPos(tt, GetUnitX(damagedUnit), GetUnitY(damagedUnit), 0)
SetTextTagText(tt, R2S(damageSum))
SetTextTagColor(tt, 255, 0, 0, 255)
SetTextTagPermanent(tt, false)
SetTextTagLifespan(tt, 0.1)
SetTextTagVelocity(tt, 0, 0.03)
SetTextTagVisibility(tt, true)
end
function InitTriggers()
local trigger t = CreateTrigger()
TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DAMAGED)
TriggerAddAction(t, ShowDamageSum)
end
function InitGlobals()
-- 初始化伤害值之和变量
damageSum = 0
end
function main()
InitGlobals()
InitTriggers()
end
```
这只是一个简单的示例代码,你可以根据具体需求进行修改和完善。希望对你有所帮助!
阅读全文