在我的第一个游戏中,我有一个用加速度计控制的涂鸦。在许多游戏中,我看到当设备标题为对象(在我的情况下是一个涂鸦鱼)旋转倾斜,所以它给人一种错觉,“鱼”游泳下来,如果设备上下倾斜“鱼“上下游泳。
使用Corona SDK时如何在lua中编写?
这是我到目前为止移动涂鸦的代码;
display.setStatusBar(display.HiddenStatusBar)
system.setAccelerometerInterval( 50 )
_W = display.contentWidth
_H = display.contentHeight
local bg = display.newImageRect("images/bg.png", 480, 320)
bg:setReferencePoint(display.CenterReferencePoint)
bg.x = _W/2
bg.y = _H/2
local player = display.newImageRect("images/doodle.png", 128, 64)
player:setReferencePoint(display.CenterReferencePoint)
player.x = _W/2
player.y = _H/2
-- Set up the Accelerometer values in Landscape
local motionX = 0
local motionY = 0
local function onAccelerate( event )
motionX = 10 * event.yGravity;
motionY = 10 * event.xGravity;
end
Runtime:addEventListener ("accelerometer", onAccelerate);
-- Make the player move on tilt.
local function movePlayer (event)
player.x = player.x + motionX;
player.y = player.y + motionY;
end
Runtime:addEventListener("enterFrame", movePlayer)
local function screenBoundaries (event)
-- Left side boundaries
if player.x < 0 + player.width/2 then
player.x = 0 + player.width/2
end
-- Right side boundaries
if player.x > display.contentWidth - player.width/2 then
player.x = display.contentWidth - player.width/2
end
-- Upper boundaries
if player.y < 0 + player.height/2 then
player.y = 0 + player.height/2
end
-- Lower boundaries
if player.y > display.contentHeight - player.height/2 then
player.y = display.contentHeight - player.height/2
end
end
Runtime:addEventListener("enterFrame", screenBoundaries)
EDIT;
我试图让播放器旋转到倾斜但它不起作用,当我在模拟器中运行它时它没有返回任何错误,我做错了什么?
基本上我想做的是当加速度计y值增加/减少玩家(鱼)上下游泳但我只希望它适度倾斜(0到+/- 45度)或者看似真实的东西。也许25-35度是最佳的?
我的数学不是最新的,所以我为此道歉,有人可以帮我这个吗?
display.setStatusBar(display.HiddenStatusBar)
system.setAccelerometerInterval( 50 )
_W = display.contentWidth
_H = display.contentHeight
local ceil = math.ceil
local pi = math.pi
local atan2 = math.atan2
local playerRotation
-- Put the doodle fish in the center if the screen.
local player = display.newImageRect("images/doodle.png", 128, 64)
player:setReferencePoint(display.CenterReferencePoint)
player.x = _W/2
player.y = _H/2
-- My rotation function, not sure how to do it right.
local function getPlayerRotationAngle(xGravity, yGravity)
angle = math.atan2(xGravity, yGravity)
angle = angle*(180/pi)
playerRotate = ceil(360 - angle(xGravity, yGravity))
return playerRotate
end
-- Set up the Accelerometer values in Landscape
local motionX = 0
local motionY = 0
local function onAccelerate( event )
motionX = 5 * event.yGravity;
motionY = 5 * event.xGravity;
-- Should I put the rotation here or down in the movePlayer function?
player.rotation = playerRotate(event.yGravity, event.xGravity);
end
Runtime:addEventListener ("accelerometer", onAccelerate);
-- Make the player move on tilt.
function movePlayer (event)
player.x = player.x + motionX
player.y = player.y + motionY
end
Runtime:addEventListener("enterFrame", movePlayer)
答案 0 :(得分:0)
您的整体代码看起来不错。 我做过的几场比赛都使用了类似的东西。
你提到的是什么跳出来
我试图让播放器旋转到倾斜但它不起作用,当我在模拟器中运行它时它没有返回任何错误,我做错了什么?
您实际在设备上运行代码吗? Corona SDK模拟器不支持加速计的模拟,因此事件永远不会发生。
如果您在设备上运行,请添加Crawl Space Library。 这将允许您打印()任何形式的数据,包括表格。 然后添加
print(event)
到你的onAccelerate()函数,将你的设备挂钩到你的开发机器,并在控制台上查看你实际收到的数据。 (假设您正在使用Mac开发iOS,请使用 iPhone配置实用程序来获取数据)。然后从那里调试。
包括
io.output():setvbuf("no")
在main.lua的开头首先禁用设备上的控制台输出缓存。否则,设备的控制台输出将被缓冲并且难以调试。