Corona SDK轨道对象改变方向

时间:2013-05-04 00:06:17

标签: physics corona orbit

我有以下代码:

deg = 0.0;
local function onTouch(event)
   if(event.yStart >= event.y) then
      deg = deg + 10;
   elseif(event.yStart <= event.y) then
      deg = deg -10;
   end  

   rads = deg * (math.pi /180.0);
   x = 100.0 * math.cos(rads);
   y = 100.0 * math.sin(rads);
   rect.x = magnet.x + x;
   rect.y = magnet.y + y;
end

它在某种程度上有效,但它并不完美。我想要做的是当用户拖动对象时将顺时针旋转。当用户向下拖动时,物体逆时针旋转(通过旋转我的意思是绕另一个物体运行)。

我遇到的问题是当用户向上或向下拖动时,deg会持续递增。所以当改变方向时,它必须一直向下增加到0以有效地改变方向。我无法弄清楚如何在不拧紧物体位置的情况下有效地重置变量deg。

提前感谢。

修改

在查看代码后,我意识到问题是我上面所说的。问题是,当我改变方向时,event.yStart不会重置!

所以会发生什么,假设我开始200px,当我向上拖动意志增加只要我保持在200px以上(无论我向上或向下拖动。并且不会开始递减直到我低于200px。

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

deg = 0.0;
local prevPosY = 0
local function onTouch(event)
   if event.phase == "began" then
      prevPosY = event.y
   end
   if(event.y >= prevPosY) then
      deg = deg + 10;
   elseif(event.y <= prevPosY) then
      deg = deg -10;
   end  
   prevPosY = event.y

   rads = deg * (math.pi /180.0);
   x = 100.0 * math.cos(rads);
   y = 100.0 * math.sin(rads);
   rect.x = magnet.x + x;
   rect.y = magnet.y + y;
end

答案 1 :(得分:0)

deg = 0.0;
prevY = 0;
local function onTouch(event)
  if event.phase == "began" then
      prevY = event.y
   end
   if(event.y >= prevY) then
      deg = deg + 10;
   elseif(event.y <= prevY) then
      deg = deg -10;
   end  
   prevY = event.y

   rads = deg * (math.pi /180.0);
   x = 100.0 * math.cos(rads);
   y = 100.0 * math.sin(rads);
   rect.x = magnet.x + x;
   rect.y = magnet.y + y;
end