# (Libgdx) animation nur einmal in einem Event aufrufen



## Javaamateur (9. Okt 2018)

Moin Leute mache grade ein kleines Spiel.
Bei einer Kollision soll eine Animation ausgeführt werden. Allerdings wiederholt die sich immer wieder wenn die Kollision stattfand. Wenn ich das Looping jedoch ausmache dann findet die Animation nur bei der ersten Kollision statt, bei den weiteren nicht mehr.

Ich nutze libgdx
Hier mein Code

```
elapsedTime += Gdx.graphics.getDeltaTime();

if (Intersector.overlaps(Circle, Rechteck[i])){

batch.draw((TextureRegion) fleckanimation.getKeyFrame(elapsedTime, true));
}
```

in dem Beispiel habe ich das loopen durch das true angemacht.
Hoffe ihr könnt mir helfen


----------



## MaDDin-94 (10. Nov 2018)

Also zunächst einmal solltest du für deine Animation "fleckanimation" als generischen Datentypen "TextureRegion" mitgeben.
Das sollte so aussehen:

```
Animation<TextureRegion> fleckanimation = new Animation<TextureRegion>(0.2f, *deineFrames*);
```
Dann musst du das Keyframe, dass du bekommst nicht casten. Das würde beim rendern so aussehen:

```
batch.draw(fleckanimation.getKeyFrame(elapsedTime, true), 0, 0);
```

Zu dem Problem mit der Animation:
Du musst einfach nur "elapsedTime" auf 0 setzten, sobald ein Rechteck mit deinem Circle überlappt.
Wenn aber ein Rechteck weiterhin dein Circle überlappt, würde die Animation im Frame 0 festhängen.
Also benötigst du einen Weg, um festzustellen, ob ein Rechteck soeben mit deinem Circle überlappt. Besteht diese Überlappung weiterhin, wird "elapsedTime" nicht mehr zurückgesetzt.

Ich hoffe ich konnte helfen.


----------

