简体   繁体   中英

Crash on nil value - Love2D Lua

I'm instantiating a ball and it works well, when I try to call centerCoordinatesOn it crashes.

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

If I remove the method and just call the content of it manually it works fine:

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

I've also tried renaming the variables, maybe they would conflict with the internal methods of the class width -> self.width, but the same things happed even if I call them a,b,c.

You forgot the : so you only have 3 params rather than the 4 expected by centerCoordinatesOn , when you call self.ball.centerCoordinatesOn(1,1,1)

This is because when you defined

Ball:centerCoordinatesOn(x, y, width)

an alternate way to write this definition is

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

with either definition width is the 4th param, which ends up nil with your current call.

So your call of self.ball.centerCoordinatesOn(1,1,1) should be:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM