使用rxi写的 'classic' 库遇到的问题

目前,我正在尝试学习如何使用Love2D框架制作视频游戏。一篇教程建议使用rxi的 'classic' 库来应用面向对象编程。

当前,我正在尝试创建一个 shape.lua 文件来描述一个通用的形状(无论是圆形、矩形还是三角形)。这是我要用来派生一个描述矩形的子类的基类,称为 rectangle.luashape.lua 文件只处理它的子类移动,因为这些矩形在屏幕上移动。

但是,每当我尝试运行 main.lua 文件时,就会出现以下错误:

Error

rectangle.lua:16: attempt to index global 'Shape' (a nil value)

Traceback

rectangle.lua:16: in main chunk
[C]: in function 'require'
main.lua:3: in function 'load'
[C]: in function 'xpcall'
[C]: in function 'xpcall'

下面是我的 main.lua 文件:

function love.load()
  Object = require "classic"
  require "rectangle"
  require "shape"
  require "circle"

  r1 = Rectangle(50, 50, 90, 60, 100)
  r2 = Circle(350, 80, 40)
end

function love.update(dt)
  r1:update(dt)
  r2:update(dt)
end

function love.draw()
  r1:draw()
  r2:draw()
end

这是我的 shape.lua 文件:

Shape = Object:extend()

function Shape:new(x, y)
  self.x = x
  self.y = y
  self.speed = 100
end

function Shape:update(dt)
  self.x = self.x + self.speed * dt
end

以下是我的 rectangle.lua 文件:

Rectangle = Shape:extend()

function Rectangle:new(x, y, width, height)
    Rectangle.super.new(self, x, y)
    self.width = width
    self.height = height
end

function Rectangle:draw()
    love.graphics.rectangle("line", self.x, self.y, self.width, self.height)
end

现在我想要的结果是一个圆和一个矩形以相同的速度向右移动。

如果需要的话,我也在使用Atom文本编辑器。

我更喜欢答案坚持使用 'classic' 库,所以如果有人使用它,那么帮助将非常感激!

点赞
用户2858170
用户2858170

在你的 rectangle.lua 的作用域内, Shape 是一个 nil 值。

你执行 require "rectangle",这将在那个文件中执行代码,其中 Rectangle = Shape:extend()会立即因为对 Shape 的索引而发生错误。

rectangle.lua 中添加 require "shape" 应该可以解决这个问题。

另一个选择是在你的 main.lua 中交换 require "shape"require "rectangle",但是在需要的地方进行需求比较好。

2020-06-15 07:27:54