2016-08-22 3 views
0
local function shoot(event) 

    local x, y = event.x, event.y 
    rotateShip(x, y) 

    local laser = display.newImage("Images/laser.png") 
    laser.x = player.x 
    laser.y = player.y 
    transition.to(laser, {time=300, x=x, y=y, onComplete=shotDone}) 

end 

^Это мой код. Он снимает объект, пока он не достигнет положения щелчка. Я хочу, чтобы это продолжалось до щелчка, пока он не достигнет края экрана. У меня уже есть угол выстрела, хранящийся в переменной, поэтому ради этого мы будем называть «shotAngle»Съемка объекта до конца экрана не только до положения курсора

Любая помощь была бы принята с благодарностью!

Liv :)

ответ

0

Окей, поэтому, прежде всего, вы не должны делать это движение 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 
+0

Большое вам спасибо! Это мне очень помогает :) – AshesAnonnnnn

+0

Когда я запустил его, он говорит, что он не может выполнять математику, потому что tx - значение nil. Я предполагаю, что это связано с тем, что tx определяется как nil, а затем все равно nil, если значение ty больше высоты. – AshesAnonnnnn

+0

@Liv фиксированный. Должен работать теперь во всех случаях, я начал писать случай, в котором нам нужно вычислить 'tx', а затем полностью забыть начальную, kek. – Green

Смежные вопросы