我正在制作一款经典的RPG,需要一些基于操纵杆的运动方面的帮助。玩家应该能够用他用拇指移动的圆形垫向任何方向移动角色。这应该是FPS游戏所熟悉的,其中打击垫控制角色的左/右和前/后移动。构建角色的代码是:
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文件中):
function player:startMoving( xMotion, yMotion)
self:setLinearVelocity( xMotion*player.speedModifier, yMotion*player.speedModifier)
end
现在在我的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' (零值)。它不会将播放器识别为物理对象,但如果我将player.lua文件中的播放器物理对象类型更改为动态,
physics.addBody( newPlayer.image, "kinematic" ) ___
|
physics.addBody( newPlayer.image, "dynamic" ) <--
然后重力功能运行良好,它落在屏幕上。谁能帮助我解决这里发生的事情?
答案 0 :(得分:0)
好的,我得到了我的问题的答案。当我将播放器的图像初始化为物理对象时,我将其初始化为newPlayer.image,因此当我设置线速度时,我需要放置
self.image:setLinearVelocity
而不是
self:setLinearVelocity
因为self.image,而不是self,是物理对象。