Lua 从Corona SDK中的外部模块设置物理对象的线速度
我正在做一个经典的RPG游戏,需要一些基于操纵杆的运动帮助。玩家应该能够用拇指移动的圆形垫子向任何方向移动角色。这在FPS游戏中应该很熟悉,在FPS游戏中,pad控制角色的左/右和前/后移动。我构建角色的代码如下: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
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