你觉得这个问题应该很简单,但我却花了很长时间才找到答案。问题是:
非局部变量是在脚本函数内声明的作用域是多少?
我现在正在尝试制作一个基于文本的RPG,已经到了能够为角色创建技能/能力的阶段。这些技能/能力用于在战斗中 BUFF/BUFF ENEMY/ENEMY。为了实现这一点,我已经创建了一个BUFF/DEBUFF的构造函数来跟踪相关信息。最重要的是, BUFF 的实际效果,以及当其计时器到期时,它如何被删除。
function buff (_target, _name, _turns, _effect, _remove_effect) constructor {
target = _target
name = _name
turns = _turns
effect = _effect
remove_effect = _remove_effect
}
我的所有技能都是脚本函数,它们创建了本地结构的缓冲器。例如,一个技能是这样子的:
function skill_increase_attack () {
_amount = round(global.player.str * 0.2)
var _attack_buff = new buff(BUFFDEBUFF.PLAYER, "Attack Buff", 3,
function () { //effect
global.player.str_array[2] += _amount
},
function () { //remove-effect
global.player.str_array[2] -= _amount
})
//以下这就是BUFF被应用的地方,但这与我的问题无关。
通常,我总是声明本地变量,但 effect() 和 remove\_effect() 都需要使用确切的值,以便玩家的力量不会因 BUFF 而永久升高,并且使用 var _amount 并不起作用,因为它在这两个范围之外。
但是,如果使用仅 _amount 而无 var 就会工作,而不是使用全局变量 global._amount 也会工作。根据我的理解,所有在脚本中的变量都是全局变量。但是,如果我试图通过在函数外部显示 show_message(_amount) 或 show_message(global._amount) 来测试这一点,我就会收到错误。
我的代码已经按照这种方式工作,所以这也不会导致问题。但是,我只是想知道 _amount 这个变量是否与其他任何变量绑定,或者以何种方式工作。如果以这种方式在多个脚本函数中使用 _amount 是否有可能导致问题,如内存泄漏、程序运行速度减慢等。
评论 (0)