2016-08-22 8 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」と呼ぶことにします。カーソル位置まで画面の最後までオブジェクトを撮影する

ご協力いただけると助かります。

リヴ:)

答えて

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は無価値なので数学ができないと言います。これは、txがnilと定義されていて、tyがheightより大きい場合を除いて、nilと定義されているためです。 – AshesAnonnnnn

+0

@Livが修正されました。今のところすべての場合に動作するはずですが、私は 'tx'を計算して最初のkekを完全に忘れてしまうケースを書き始めました。 – Green

関連する問題