画面をクリックして、クリックした場所まで戦車のバレルを回転させようとしています。今のところ、そのコードが機能するようになりました。私がやろうとしている次のステップは、たとえば、タンクのバレルが右側を向いているとしましょう。左側をクリックすると、タンクのバレルはすぐに左側に回転します。タンクバレルが右側から左側に移行するようにして、右から左に表示されるだけでなく、動き/動きが発生するのを確認できるようにします。
もう一度、タンクバレルが右側から消えて左側に再び現れるのではなく、実際に右から左に回転/遷移するのを見たいです(タンクバレルの実際の回転を模倣しようとしています)。
画面をタップしてタンクバレルがその方向を目指すコードは以下のとおりです(クリックアンドホールドすると、タンクバレルを目的の場所にドラッグして、取り除こうとするコードが実装されています)タップして今に移行するだけです)。
local function rotateObj(event)
local t = event.target
local phase = event.phase
if event.y < 225 then
if (phase == "began") then
display.getCurrentStage():setFocus( t )
t.isFocus = true
local diffX = tankbarrel.x - event.x
local diffY = tankbarrel.y - event.y
tankbarrel.rotation = math.atan2(diffY, diffX) / RADIANS_TO_DEGREES + 180
-- Store initial position of finger
t.x1 = event.x
t.y1 = event.y
elseif t.isFocus then
if (phase == "moved") then
t.x2 = event.x
t.y2 = event.y
angle1 = 180/math.pi * math.atan2(t.y1 - t.y , t.x1 - t.x)
angle2 = 180/math.pi * math.atan2(t.y2 - t.y , t.x2 - t.x)
print("angle1 = "..angle1)
rotationAmt = angle1 - angle2
--rotate it
tankbarrel.rotation = tankbarrel.rotation - rotationAmt
print ("tankbarrel.rotation = "..tankbarrel.rotation)
-- set limits to how far the barrel can rotate
if tankbarrel.rotation < 210 then
tankbarrel.rotation = 209
end
if tankbarrel.rotation > 330 then
tankbarrel.rotation = 329
end
t.x1 = t.x2
t.y1 = t.y2
elseif (phase == "ended") then
display.getCurrentStage():setFocus( nil )
t.isFocus = false
end
end
end
-- Stop further propagation of touch event
return true
end