Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 从Corona SDK中的外部模块设置物理对象的线速度_Lua_Coronasdk_Physics - Fatal编程技术网

Lua 从Corona SDK中的外部模块设置物理对象的线速度

Lua 从Corona SDK中的外部模块设置物理对象的线速度,lua,coronasdk,physics,Lua,Coronasdk,Physics,我正在做一个经典的RPG游戏,需要一些基于操纵杆的运动帮助。玩家应该能够用拇指移动的圆形垫子向任何方向移动角色。这在FPS游戏中应该很熟悉,在FPS游戏中,pad控制角色的左/右和前/后移动。我构建角色的代码如下: local player = {} local player_mt = { __index = player } function player.new( --[[ parameters for player instance ]]-- ) lo

我正在做一个经典的RPG游戏,需要一些基于操纵杆的运动帮助。玩家应该能够用拇指移动的圆形垫子向任何方向移动角色。这在FPS游戏中应该很熟悉,在FPS游戏中,pad控制角色的左/右和前/后移动。我构建角色的代码如下:

    local player = {}
    local player_mt = { __index = player }

    function player.new( --[[ parameters for player instance ]]-- )
      local newPlayer = { --[[ player attributes here ]]-- }

      newPlayer.image = display.newImage("testImage.png")

      physics.addBody( newPlayer.image, "kinematic" )

      return setmetatable( newPlayer, player_mt )
    end
这是移动角色的函数(仍在相同的.lua文件中):

现在,在我的main.lua文件中,我正在测试我的所有功能,我初始化了一个新的播放器,为操纵杆创建了一个圆圈,添加了一个触摸事件监听器,并使用它调用我的移动功能:

    local physics = require("physics")
    physics.start()

    local player = require("player")

    local myPlayer = player.new( --[[player params]]-- )

    myControl = display.newCircle( 300, 300, 100 )
    myControl:setFillColor( 100, 100, 100 )
    myControl:addEventListener( "touch", controlCharacter )

    function controlCharacter( event )
      if( event.phase == "began" ) then
        x = myControl.x
        y = myControl.y
      elseif( event.phase == "moved" ) then
        myControl.x = event.x
        myControl.y = event.y
        myPlayer:startMoving( myControl.x - event.x, myControl.y - event.y )
      elseif( event.phase == "ended" ) then
        myControl.x = x
        myControl.y = y
      end
    end
当我运行此程序时,会出现以下错误:尝试调用方法“setLinearVelocity”(一个nil值)。这就像它不将玩家识别为物理对象一样,但是如果我将player.lua文件中的玩家物理对象类型更改为dynamic

    physics.addBody( newPlayer.image, "kinematic" )  ___
                                                        |
    physics.addBody( newPlayer.image, "dynamic" )    <--
physics.addBody(newPlayer.image,“运动学”)___
|

physics.addBody(newPlayer.image,“dynamic”)好的,我得到了问题的答案。当我将播放器的图像初始化为物理对象时,我将其初始化为newPlayer.image,所以当我设置线速度时,我需要

    self.image:setLinearVelocity 
而不是

    self:setLinearVelocity

因为self.image,而不是self,是物理对象。

localplayer\u mt={{\uu intex=player}
intex
是你实际代码中的一个输入错误还是就在这里?
setLinearVelocity
函数从何而来?很抱歉,这是一个输入错误,将代码从文件中带过来。我把我的帖子写得更简洁了,在这个过程中犯了一个错误__intex实际上是我代码中的索引。setLinearVelocity函数包含在main.lua文件所需的物理库中。是否在其他位置成功调用setLinearVelocity?lua应该如何从player对象中找到函数?addBody是否以某种方式修改了它的索引表?不,我甚至不能直接从main.lua调用它。。。我想我最好去想一想。调用physics.addBody时,setLinearVelocity函数将添加到播放器对象。我不知道addBody是否过度写入了我以前的对象,或者它是否会添加到它。我还得研究一下。
    self:setLinearVelocity