Окей, поэтому, прежде всего, вы не должны делать это движение 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 - значение nil. Я предполагаю, что это связано с тем, что tx определяется как nil, а затем все равно nil, если значение ty больше высоты. – AshesAnonnnnn
@Liv фиксированный. Должен работать теперь во всех случаях, я начал писать случай, в котором нам нужно вычислить 'tx', а затем полностью забыть начальную, kek. – Green