尝试调用'addEventListener'(一个空值)

我在createScene函数中使用display.newRoundRect()创建了一些对象,然后在enterScene函数中调用了这个函数。

function generate_bonus_star()
    tiles = {A1, A2, A3, A4, A5, A6, B1, B2, B5, B6, C1, C6, D1, D6, E1, E2, E5, E6, F1, F2, F3, F4, F5, F6}
    math.randomseed(os.clock())
    index = math.random(1,23)
    index_bonus_score = math.random(1,23)
    print("bonus star generated at "..index)
    print("bonus score generated at "..index_bonus_score)
end

注意:A1、A2等是使用display.newRoundRect()创建的对象。

因此,在enterScene函数中我添加了这些对象的addEventListener。但是我遇到了错误"attempt to call method 'addEventListener' (a nil value)",出现在这行代码上:

function scene:enterScene( event )
    storyboard.purgeScene("levels")--remove previuos screens
    storyboard.purgeScene("level2result")
    generate_bonus_star()

    A1:addEventListener( "touch", simple(A1) )--event listeners
    A2:addEventListener( "touch", simple(A2) )
    A3:addEventListener( "touch", simple(A3) )
    .
    .
    .
    tiles[index]:addEventListener( "touch", bonus_star ) //line 503
    tiles[index_bonus_score]:addEventListener( "touch", bonus_score )
end

编辑: 我注意到第一次运行它时没有出现这个错误,但第二次、第三次或第四次运行时会出现。

点赞
用户3770161
用户3770161

addEventLister 的第二个参数可能为空。

`simple(A1)`

在你的代码中只有名称,没有定义。

2014-08-29 07:10:29
用户2248354
用户2248354

确保在创建瓷砖之前不要设置/运行瓷砖表格。在创建对象之前运行 generate_bonus_star() 是不可能的。为了使一切正常工作,只需将 generate_bonus_star() 移至所有对象创建的下方。

function scene:enterScene( event )
  storyboard.purgeScene("levels")--删除以前的屏幕
  storyboard.purgeScene("level2result")
  -- generate_bonus_star() 这里不应该出现

  A1:addEventListener( "touch", simple(A1) )--事件侦听器
  A2:addEventListener( "touch", simple(A2) )
  A3:addEventListener( "touch", simple(A3) )

  ...
  ...
  -- 在创建所有对象(A1,A2...F5,F6)之后
  generate_bonus_star()
2014-08-29 09:09:37