CS50 游戏课程中的 push.lua 出错

Posted

技术标签:

【中文标题】CS50 游戏课程中的 push.lua 出错【英文标题】:Error with push.lua from CS50 game course 【发布时间】:2021-11-11 08:16:59 【问题描述】:

我对包含“main.lua”和“push.lua”的文件夹“pong-1”有疑问。当我将它们选择到“LÖVE”中时,它会说:

>Error
push.lua:71: bad argument #1 to 'insert' (table expected, got number)
[C]: in function 'insert'
push.lua:71: in function 'setupCanvas'
main.lua:12: in function 'load'
[C]: in function 'xpcall'
[C]: in function 'xpcall'

我尝试使用过时版本的 push.lua(它提供课程的源代码)以及我能找到的最新版本,但它们都不起作用。两者都显示相同的错误消息。可能是什么问题?

【问题讨论】:

您可以下载的代码无需任何修改即可运行。该错误告诉您您在预期表格的位置提供了一个数值。你修改代码了吗?你在哪里下载的?共享调用堆栈中提到的函数 load 和 setupCanvas 我只是从push的github上下载的:github.com/Ulydev/push/blob/master/push.lua,没有做任何修改就放到了“pong-1”文件夹中。在 main.lua 中,我确实 push = require 'push',所以我想应该没问题。 main 中的函数 load 如下: function love.load() love.graphics.setDefaultFilter('nearest', 'nearest') push:setupCanvas(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT, fullscreen = false, resizable = false, vsync = true ) 结束 【参考方案1】:
function push:setupCanvas(canvases)
  table.insert(canvases,  name = "_render", private = true ) --final render

  self._canvas = true
  self.canvases = 

  for i = 1, #canvases do
    push:addCanvas(canvases[i])
  end

  return self
end

这个函数期望canvases 是一个表值。

您在函数调用中提供一个数字值VIRTUAL_WIDTH

push:setupCanvas(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, WINDOW_WIDTH,
  WINDOW_HEIGHT, fullscreen = false, resizable = false, vsync = true )

改为。

看来您将setupCanvassetupScreen 混淆了

【讨论】:

以上是关于CS50 游戏课程中的 push.lua 出错的主要内容,如果未能解决你的问题,请参考以下文章

CS50 Speller 中的分段错误。为啥?

尝试使用 localStorage 在 JavaScript 中保存和加载带有对象的数组时出错

如何用golang写游戏加经验函数不出错

Global.asax.cs 为 /.aspx 执行子请求时出错。 Server.Transfer

尝试在 C++ 中使用 glDrawArrays 时出错

CS50-Python实验3,4