【问题标题】:Corona SDK - How to remove an item(Coins) when collide with an object(player)?Corona SDK - 如何在与对象(玩家)碰撞时移除项目(硬币)?
【发布时间】:2018-10-09 23:28:32
【问题描述】:

我最近开始使用 Corona SDK 学习和开发游戏,现在我面临着在游戏中收集硬币的问题。当玩家对象与硬币对象碰撞时,硬币应该被移除/消失。我尝试了下面的代码,当硬币与玩家碰撞时它会失败,它会抛出错误

尝试调用方法“翻译”(零值)

下面是我使用的代码,

------Create Coins------

function coin()
token = display.newImage(sceneContainer, "gold.png")
token.x = math.random(320, 720)
token.y = math.random(160, 260)
token.myName = "token"
physics.addBody( token, "dynamic", { bounce=0, friction=1, radius=20 })

local function muovi()
token:translate(-2, 0) 
end

Runtime:addEventListener( "enterFrame", muovi )
end

tmr = timer.performWithDelay(5000, coin, 0)

------Collision Function------ 


function onCollision( event )
  if ( event.phase == "began" ) then
   if event.object1.myName == "player" and event.object2.myName == "token" then
      event.object2:removeSelf()
        print("hitting 1")
 elseif event.object1.myName == "token" and event.object2.myName == "player" then
   event.object1:removeSelf()
   print("hitting 1")
     end
    end
   end
 Runtime:addEventListener( "collision", onCollision)

【问题讨论】:

    标签: lua coronasdk game-development


    【解决方案1】:

    查看Corona Documentation 中的问题。

    作为最佳实践,您应该将相关变量设置为 nil 调用 object:removeSelf() 之后。

    当一个对象被移除时,该对象的渲染相关资源 删除的对象立即被删除。剩下的物体是 只是一个简单的 Lua 表,其中包含所有非显示对象属性—— metatable 设置为 nil 并且所有与显示对象相关的属性 被删除。因此,如果 Lua 中仍有对对象的引用, 它们只是对普通 Lua 表的引用。

    在调用 removeSelf() 后尝试将对象设置为 nil

    if ( event.phase == "began" ) then
       if event.object1.myName == "player" and event.object2.myName == "token" then
          event.object2:removeSelf()
          event.object2 = nil
            print("hitting 1")
     elseif event.object1.myName == "token" and event.object2.myName == "player" then
       event.object1:removeSelf()
       event.object1 = nil
       print("hitting 1")
         end
        end
       end
    

    如果您阅读第二点,您会注意到您仍然有一个包含所有非显示对象属性的普通 Lua 表,所以我猜它调用了 removeSelf 两次。第一次从显示中删除对象,但没有删除 myName 字段。因此,当它被第二次调用时,它会再次尝试 removeSelf。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2020-03-29
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      相关资源
      最近更新 更多