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

ある意味では機能しますが、完全には機能しません。私がやろうとしているのは、ユーザーがオブジェクトをドラッグすると時計回りに回転することです。ユーザーが下にドラッグすると、オブジェクトは反時計回りに回転します (回転とは、別のオブジェクトを周回することを意味します)。

私が抱えている問題は、ユーザーが上下にドラッグすると、度が上下に増加し続けることです。したがって、方向を変更するときは、方向を変更するために効果的に 0 までインクリメントする必要があります。オブジェクトの位置をねじ込むことなく、可変角度を効果的にリセットする方法がわかりません。

事前に感謝します。

編集

コードを見た後、問題は私が上で述べたものではないことに気づきました。問題は、方向を変えると event.yStart がリセットされないことです!

したがって、200px を開始すると仮定すると、上にドラッグすると、200px を超えている限り増加します (上にドラッグしても下にドラッグしても、200px を下回るまで減少し始めません)。

4

2 に答える 2

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 に答える
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 に答える