我的目标是创建一个平台,从一个x,y坐标到触摸事件,这样滑动手指就可以实时移动和调整平台大小。然而问题是,如果在所述平台上有一个球,然后我移动平台,球将冻结并停止像球一样,直到平台完成被操纵。
有没有一种方法可以让球在他们所在的平台被移动时继续正常运行?
我已经包含了代码,因此您可以使用它并查看我的意思。看到我所说的最好的方法是点击创建一个平台,等待球落在它上面,然后拖动平台的末端。
local physics = require("physics");
physics.start();
physics.setDrawMode("hybrid");
W = display.contentWidth;
H = display.contentHeight;
balls = {};
local function createPlatform(event)
if (event.phase == "began") then
if(line) then
line.parent:remove(line);
end
x = (event.x - (W/2 - 80));
y = (event.y - (H/2));
line = display.newLine(W/2 - 80, H/2, event.x, event.y)
line.width = 5;
physics.addBody(line, "static", {shape = {0, 0, x, y}});
line.isBullet = true;
end
if (event.phase == "moved") then
x = (event.x - (W/2 - 80));
y = (event.y - (H/2));
if (line) then
line.parent:remove(line);
end
line = display.newLine(W/2 - 80, H/2, event.x, event.y)
line.width = 5;
physics.addBody(line, "static", {shape = {0, 0, x, y}});
line.isBullet = true;
end
if (event.phase == "ended") then
end
end
local function spawnBalls(event)
i = 1;
local function spawnb(event)
rand = math.random(1, 4);
if (rand == 1) then
balls[i] = display.newCircle(math.random(140, 180), -30, 7.5);
balls[i]:setFillColor(255,0,0);
physics.addBody(balls[i], {radius = 7.5})
balls[i].isBullet = true;
i = i + 1;
rand = math.random(1,4)
elseif (rand == 2) then
balls[i] = display.newCircle(math.random(140, 180), -30, 7.5);
balls[i]:setFillColor(0, 255, 0);
physics.addBody(balls[i], {radius = 7.5})
balls[i].isBullet = true;
i = i + 1;
rand = math.random(1,4)
elseif (rand == 3) then
balls[i] = display.newCircle(math.random(140, 180), -30, 7.5);
balls[i]:setFillColor(0, 0, 255)
physics.addBody(balls[i], {radius = 7.5})
balls[i].isBullet = true;
i = i + 1;
rand = math.random(1,4)
elseif (rand == 4) then
balls[i] = display.newCircle(math.random(140, 180), -30, 7.5);
balls[i]:setFillColor(255, 255, 0);
physics.addBody(balls[i], {radius = 7.5})
balls[i].isBullet = true;
i = i + 1;
rand = math.random(1,4)
end
end
timer.performWithDelay(1500, spawnb, -1);
end
spawnBalls();
Runtime:addEventListener("touch", createPlatform)
答案 0 :(得分:0)
我认为这是因为你在Box2D有机会计算身体的新位置/速度之前移除了身体(线)(当你的手指,鼠标在屏幕上移动时)...你可以尝试增加位置迭代和帧速率......但由于性能损失,这并不是真的建议 我建议旋转和剥落身体,不要去除它,并添加一个新的。您可以使用.rotation和.xScale / .yScale。
没试过,但这就是我要做的。 我对Corona也有点新意见......所以没有保证。