2016-08-06 18 views
1

libgdxでアクタのカスタムアクションを作成するにはどうすればよいですか?私ができないのであれば、少なくともカスタムコードを実行するアクション(例えば、メソッドアクションを呼び出すアクション)よりもですか?ありがとう。Libgdx |カスタムアクション

EDIT: 私は、このクラスを作成しました:

class GapSizeAction extends TemporalAction { 

private float newSize; 
private Blocker blocker; 

public static GapSizeAction getRotateAction(float newSize, float duration) { 
    return new GapSizeAction(newSize, duration); 
} 

public GapSizeAction(float newSize, float duration) { 
    super(duration); 
    System.out.println("Construct"); 
    this.blocker = (Blocker)target; 
    this.newSize = newSize; 
} 

private float start, end; 

protected void begin() { 
    System.out.println("Begin"); 
    start = blocker.gap; 
} 

protected void update(float percent) { 
    blocker.gap = (start + (end - start) * percent); 
} 

} 

問題は、私はギャップ材(フロート)とカスタムの俳優を使用していますということです。ギャップのメンバー変数にアクセスできるように、ターゲットをブロッカーにキャストしようとしますが、ギャップはnullに終わります。私はギャップがnullでないことを確認することができます、私はコンストラクタで初期化します。ブロック(カスタムアクタ)もnullではありません。私はこれについて間違っていますか?例えばアクションで

+0

アクションでメソッドを呼び出すには、RunnableActionを使用します。時間の経過とともに徐々に何かを行うアクションが必要な場合は、TemporalActionを延長します。これを行う方法の例については、MoveToActionソースコードを参照してください。 – Tenfour04

+0

@ Tenfour04私はトラブルを抱えています。私はTemporalActionを実装し、MoveToActionを見てから、クラスを作成しました。上記のコードを編集して、私が行ったことを示します。長い話は短く、上記の詳細はうまくいきません。 – Wyatt

答えて

2

あなたの問題は、あなたのコンストラクタ内の行this.blocker = (Blocker)target;です。コンストラクタが呼び出されると、アクションはまだターゲットに設定されていないので、targetはnullです(したがって、blockerになります)。また、単一の浮動小数点数を変更しているので、FloatActionを拡張してコードを保存することができます。私はあなたのクラスを以下のように書きます。簡単なプーリングをサポートするには、コンストラクタを空にして、静的ファクトリメソッドで設定することができます。

class GapSizeAction extends FloatAction { 

    public static GapSizeAction getRotateAction(float newSize, float duration){ 
     GapSizeAction action = Actions.action(GapSizeAction.class); 
     action.setEnd(newSize); 
     action.setDuration(duration); 
     return action; 
    } 

    protected void begin() { 
     if (target instanceof Blocker) 
      setStart(((Blocker)target).gap); 
     else 
      Gdx.app.logError("Target is not a blocker: " + target.toString()); 
     super.begin(); 
    } 

    protected void update (float percent) { 
     super.update(percent); 
     if (target instanceof Blocker) 
      ((Blocker)target).gap = getValue(); 
    } 

} 
+0

ありがとう! – Wyatt

-1

フェード:

actor.AddAction(Actions.fadeIn(2.0f)); 
+0

私はそれを行う方法を知っています、私はカスタムアクションを作成する方法を尋ねています。 – Wyatt

関連する問題