2017-09-27 5 views
0

現在、コロナSDKを使用してトップダウンベースのゲームを作成しようとしています。 基本的に私がしたいことは、敵を地図の中心にまっすぐに移動させることです。 transition.to()でそれを行うのは簡単ですが、私がそれをすると、オブジェクトは目的地に達するまで物理的に失われます。コロナSDK - 物理を持つオブジェクトへのパスを実装する方法

私は、とにかくオブジェクトをtransition.to()のように動かすことができますが、使用していないのでしょうか?なぜなら、地図の中心に出ようとしているときに、私のオブジェクトが途中で障害物に当たってほしいからです。

ゲームのシナリオについて: そのようなタワーディフェンスゲームのように、真ん中(城)にオブジェクトがあり、側面からランダムにrespawnする他のオブジェクト(敵)によってヒットする必要があります。ここで

はいくつかのコードです:

function spawnEnemy() 
    for i=1,numberEnemies do 
     enemy = display.newImage("enemy.png") 
     physics.addBody(enemy,"dynamic") 
     enemy:addEventListener("tap",enemyKill) 
     enemy.gravityScale = -0 

     if math.random(2) == 1 then 
      enemy.x = math.random(-100, -10) 
      enemy:setLinearVelocity(50,0) 
     else 
      enemy.x = math.random (display.contentWidth + 10, display.contentWidth + 100) 
      enemy:setLinearVelocity(-40,0) 
     end 
      enemy.y = math.random(display.contentHeight) 
      --enemy.trans = transition.to(enemy, {x=centerX, y=centerY, time=5000,onComplete=hitCastle}) 

    end 
    timer.performWithDelay(10000, spawnEnemy, 0) 
end 

答えて

0

敵が中心に向かってヘッドようにするには、敵の線速度を設定する必要があります。敵が城に衝突すると、シーンから敵オブジェクトを取り除くことができます。これを行うには、2つのポイント(敵と中心)の間のベクトルを計算してから、ベクトルのXとYの両方の値に、敵を移動させたい速度で乗算する必要があります。

あなたは、あなたにxと1

の長さで中央に敵から指し示すベクトルのyの値を与える速度ベクトル(この回答に記載されていない)を正規化する必要がある
Enemy position = (EnemyXPos, EnemyYPos) 
Center Position = (CenterXPos, CenterYPos) 
Velocity Vector = (CenterXPos - EnemyXPos, CenterYPos - EnemyYPos) 

スピード調整するには

:この時点で

Adjusted Velocity Vector = (NormalizedVelXVal * Speed, NormalizedVelYVal * Speed) 

は、あなただけの上で計算した調整速度ベクトルに等しい敵の線速度を設定します。

+0

これはまさに私が探していたものでした。 –

関連する問題