オーケー、ので、すべての最初の:あなたはtransition.to()
でこの運動を行うべきではありません。私はあなたがレーザー発射体を撃つことができるゲームを作ろうとしています。あなたが現在ゲームしているすべての投射物をvelocity*dt
(現在の移動方向)で移動すると、最後のフレームからの経過時間はdt
になります。次に、あなたが遊び場から出ているかどうかをチェックし、はいの場合は削除することができます。しかし、あなたが本当にこのようにしたい場合は...
ああ男の子、ここに行く!
local function shoot(event)
local width, height -- Size of playground
local ex, ey = event.x, event.y -- Where player have clicked/tapped/etc
local px, py = player.x, player.y -- Current position of player
local speed -- Projectile speed in [pixels per milisecond]
-- Our laser projectile
local laser = display.newImage("Images/laser.png")
laser.x, laser.y = player.x, player.y
-- Borders: bx, by
local bx, by = width, height
if ex < px then
bx = 0
end
if ey < py then
by = 0
end
-- Let's get our target coordinates
local tx, ty = bx
ty = ((py-ey)/(px-ex))*bx+py-((py-ey)/(px-ex))*px
if ty > height or ty < 0 then
ty = by
tx = (by-py+((py-ey)/(px-ex))*px)/((py-ey)/(px-ex))
end
-- Let's get animation time now!
local distance = math.sqrt((tx-px)*(tx-px)+(ty-py)*(ty-py))
local time = distance/speed
-- Now, just shoot
transition.to(laser, {time=time, x=tx, y=ty, onComplete=shotDone})
end
ありがとうございました!これは私にそんなに役立ちます:) – AshesAnonnnnn
私はそれを実行すると、txは無価値なので数学ができないと言います。これは、txがnilと定義されていて、tyがheightより大きい場合を除いて、nilと定義されているためです。 – AshesAnonnnnn
@Livが修正されました。今のところすべての場合に動作するはずですが、私は 'tx'を計算して最初のkekを完全に忘れてしまうケースを書き始めました。 – Green