2012-03-12 5 views
0
function left:touch(e) 
    if(e.phase == "ended") then 
     boy:applyLinearImpulse(-0.1, .5, boy.x, boy.y) 
    end 
end 

function right:touch(e) 
    if(e.phase == "ended") then 
     print("right"); 
     boy:applyLinearImpulse(0.1, .5, boy.x, boy.y)    
    end 
end 


left:addEventListener("touch", left); 
right:addEventListener("touch" , right); 

私のゲームでは、私はapplyLinearImpulseを使用して、逆スタントマンに力を与えました。右と左のボタンをクリックすると、xとyの方向が変わります。どのようにタッチごとに異なる力を増やすのですか?タッチ機能でコロナの連続動作を行う方法は?

答えて

1

あなたのできることは次のとおりです。
開始移動イベントの最初のx、yをixiyとして保存します。
すべての移動イベントについて、
ixevent.xの差を計算し、差異dxを適用します。
y軸についても同じ処理を行います。
タッチイベントが終了した場合は、最初のx、y ixiyは不要です。

local function left:touch(event) 
    if event.phase == "began" then 
    --save the initial position of boy 
     boy.ix,boy.iy = event.x,event.y 
    elseif event.phase == "moved" then 
     if boy.ix and boy.iy then 
     --calculate the initial x,y with current event x,y difference 
      local dx = (event.x-boy.ix)*0.4 
      local dy = (event.y-boy.iy)*0.4 
      boy:applyLinearImpulse(dx,dy,boy.x,boy.y) 
      --boy:applyForce(dx,dy,boy.x,boy.y) 
      boy.ix,boy.iy = boy.x,boy.y 
     end 
    elseif event.phase == "ended" or event.phase == "cancelled" then 
     boy.ix,boy.iy = nil,nil 
    end 
end 
+1

エラーが発生しました。 – Malarkodi

+0

非常にmuchi私はこれを行うためにタイマの概念を使用していただきありがとうございます。 – Malarkodi

+0

@divyaタイマーを使う必要はありません。上記の関数は微妙に調整する必要があります。あなたのコードを見たことがないので、まっすぐコピーしてソースコードに貼り付けることはできません。 – cctan

関連する問題