【问题标题】:Crash on nil value - Love2D Luanil 值崩溃 - Love2D Lua
【发布时间】:2020-01-03 02:52:51
【问题描述】:

我正在实例化一个球,它运行良好,当我尝试调用 centerCoordinatesOn 时它崩溃了。

Ball = Class{}

function Ball:init(skin)
    -- simple positional and dimensional variables
    self.width = 8
    self.height = 8

    -- these variables are for keeping track of our velocity on both the
    -- X and Y axis, since the ball can move in two dimensions
    self.dy = 0
    self.dx = 0

    -- this will effectively be the color of our ball, and we will index
    -- our table of Quads relating to the global block texture using this
    self.skin = skin

    self.needsStartup = true
end

function Ball:centerCoordinatesOn(x, y, width)
    print(x.." "..y.." "..width)--attempt to concatenate local 'width' (a nil value)
    self.x = x + (width / 2) - 4
    self.y = y - 8
end




self.ball = Ball()
self.ball.skin = math.random(7)    
self.ball.centerCoordinatesOn(1,1,1)--crash

如果我删除该方法并手动调用它的内容,它就可以正常工作:

self.ball.x = 1 + (1 / 2) - 4
self.ball.y = 1 - 8

我也尝试过重命名变量,也许它们会与类宽度的内部方法冲突-> self.width,但即使我称它们为a,b,c也会发生同样的事情。

【问题讨论】:

  • 您忘记了 : self.ball.centerCoordinatesOn(1,1,1) 应该是 self.ball:centerCoordinatesOn(1,1,1): 传递 self 所以没有它的调用应该是 self.ball.centerCoordinatesOn(self.ball, 1, 1, 1)
  • 在右边...我是盲人。谢谢!

标签: lua love2d


【解决方案1】:

您忘记了 :,因此当您调用 self.ball.centerCoordinatesOn(1,1,1) 时,您只有 3 个参数,而不是 centerCoordinatesOn 预期的 4 个参数

这是因为当你定义了

Ball:centerCoordinatesOn(x, y, width)

编写此定义的另一种方法是

Ball.centerCoordinatesOn(self, x, y, width)

width 是第 4 个参数,在您当前的调用中以 nil 结束。

所以您拨打self.ball.centerCoordinatesOn(1,1,1) 应该是:

self.ball:centerCoordinatesOn(1,1,1) --note the : after ball.
-- or --
self.ball.centerCoordinatesOn(self.ball, 1, 1, 1) --note first param is ball.

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 2017-11-21
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2015-09-16
    • 2020-07-19
    • 2018-10-30
    • 2016-03-22
    相关资源
    最近更新 更多