0

我有以下代码:

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 之前不会开始减少。

4

2 回答 2

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
于 2013-05-04T12:16:46.943 回答
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
于 2013-05-04T06:33:59.480 回答