CS50游戏开发课程中使用Knife Timer.tween的Lua语法错误求助
解决Knife库Timer.tween的Lua语法错误(Tile透明度脉冲效果)
你的语法错误出在Timer.tween的嵌套表构造里,直接看修正后的代码:
function Tile:shimmer() if self.alpha == SHINYHIGHESTALPHA then Timer.tween(1, { [self] = {alpha = SHINYLOWESTALPHA} }) elseif self.alpha == SHINYLOWESTALPHA then Timer.tween(1, { [self] = {alpha = SHINYHIGHESTALPHA} }) end end
错误原因说明
原代码里{self.alpha = SHINYLOWESTALPHA}是非法语法:
Knife的Timer.tween要求第二个参数的子表中,键是对象的属性名字符串,而不是self.alpha这种取值表达式。你要修改的是self对象的alpha属性,所以直接写alpha = 目标值即可,不需要带上self.前缀——因为外层的[self]已经指定了要操作的对象,子表只需要声明要修改的属性名和目标值。
原写法会让Lua误以为你要用self.alpha的当前值作为键名,这种写法在表构造器里不被允许,所以抛出了'}' expected near '='的语法错误。
内容的提问来源于stack exchange,提问作者Matthew Klassen
相关产品推荐
相关产品推荐

