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.