2016-11-16 23 views
2

私はビデオゲームを持っているで回転させた後、それを指している側に矢印が移動し、矢印、例:回転後にスプライトを移動する方法指定の方向に? Libgdx - Javaの - アンドロイド

enter image description here

は、私は同じにスプライトを移動する必要があります矢印が回転した後の矢印の方向。 私はしようとしているように、コードのビット:

int count = 0; 
@Override 
protected void handleInput() { 
    if(Gdx.input.justTouched()){ 
     // move to the direction of pointing: 
     arrow.setPosition(x, y); 
    } 

} 

public void update(float dt){ 

    count++; 
    // rotate sprite: 
    arrow.setRotation(count); 

} 
+0

達成したいことは何ですか?回転させながらスプライトを動かすか、スプライトを回転させてから移動させますか? – Draz

答えて

1

並進ベクトルのxおよびy成分を決定するために、回転量の正弦及び余弦を使用することで最も簡単な方法。

1

"Java Game Development with LibGDX"という本では、作者はあなたが望む振る舞いを示すと思うゲームを作っています。ゲームは3章の "Starfish Collector"です。プレイヤーはカメを動かしてヒトデを収集します。左右の矢印キーはカメを回転させ、上矢印キーはカメが現在向いている方向に前進させます。

ゲームのソースコードは、作者のGithubアカウントhereからダウンロードできます。 (彼はzipファイルにそれを置く理由を私は知らない。)

関連するコードは次のようになります。

turtleActorを拡張し、いくつかのカスタムクラスを拡張し
@Override 
public void update(float dt) { 
    // process input 
    turtle.setAccelerationXY(0, 0); 

    if (Gdx.input.isKeyPressed(Keys.LEFT)) { 
     turtle.rotateBy(90 * dt); 
    } 
    if (Gdx.input.isKeyPressed(Keys.RIGHT)) { 
     turtle.rotateBy(-90 * dt); 
    } 
    if (Gdx.input.isKeyPressed(Keys.UP)) { 
     turtle.accelerateForward(100); 
    } 
    // ... 

accelerateForwardためのコードは次のようになります。

public void accelerateForward(float speed) { 
    setAccelerationAS(getRotation(), speed); 
} 

そしてsetAccelerationASのコードは次のようになります。このコードの最後のビットがユーザーunexistentialだったまさにおそらくであることを

// set acceleration from angle and speed 
public void setAccelerationAS(float angleDeg, float speed) { 
    acceleration.x = speed * MathUtils.cosDeg(angleDeg); 
    acceleration.y = speed * MathUtils.sinDeg(angleDeg); 
} 

注意を参照してください。

(あなたがLibGDXとゲーム開発を学習している場合、私はこの本をお勧めしますそれはとても良いことだ。。)

を参照:

0

このページで解決しました:enter link description here

 float mX = 0; 
float mY = 0; 
int velocity = 5; 
private float posAuxX = 0; 
private float posAuxY = 0; 
int count = 0; 
public void update(float dt){ 
    count2++; 
    flecha.setRotation(count2); 
    if (count2 >= 360){ 
     count2 = 0; 
    } 
    position = new Vector2((float) Math.sin(count2) * velocity, 
      (float) Math.cos(count2 * velocity)); 
    mX = (float) Math.cos(Math.toRadians(flecha.getRotation())); 
    mY = (float) Math.sin(Math.toRadians(flecha.getRotation())); 
    position.x = mX; 
    position.y = mY; 
    if (position.len() > 0){ 
     position = position.nor(); 
    } 
    position.x = position.x * velocity; 
    position.y = position.y * velocity; 
    posAuxX = flecha.getX(); 
    posAuxY = flecha.getY(); 

}

flecha.setPosition(posAuxX、posAuxY)。

+0

問題を解決した場合は、正しい答えとしてマークする必要があります。 – DavidS

関連する問題