20 개의 스피리트가 있습니다. 버튼을 클릭하면 애니메이션이 활성화되기를 원합니다. 두 가지 유형의 애니메이션 1) 위치 2) 회전.Libgdx에서 애니메이션 배치 및 회전
이렇게하는 것이 좋습니다. 내가 생각할 수있는 유일한 방법은 원하는 위치와 각도에 도달 할 때까지 Render 메서드에서 델타 값으로 재귀 적으로 setposition 및 angle을 호출하는 것입니다.
20 개의 스피리트가 있습니다. 버튼을 클릭하면 애니메이션이 활성화되기를 원합니다. 두 가지 유형의 애니메이션 1) 위치 2) 회전.Libgdx에서 애니메이션 배치 및 회전
이렇게하는 것이 좋습니다. 내가 생각할 수있는 유일한 방법은 원하는 위치와 각도에 도달 할 때까지 Render 메서드에서 델타 값으로 재귀 적으로 setposition 및 angle을 호출하는 것입니다.
시작 상태와 끝 상태가 있고 중간 상태를 채우려면 '트위닝 (inbetween)'이라고합니다. 그것은 만화 애니메이션에서 비롯되었지만보다 일반적으로 사용하게되었습니다.
LibGDX는 Universal Tween Engine을 사용합니다. here을 원하는대로 애니메이트하는 여행을 시작할 수 있습니다. 그러나 그것이 작동하는 방법에 대해 좀 더 자세하게 설명하기 위해, 여기에 내 자신의 물건의 예가 있습니다. 스프라이트에 관해서도 비슷한 사용법이지만, 제 스프라이트는 좀 더 일반적인 클래스 인 JJRenderNode에 싸여 있습니다. 수업을 열어서 트위닝하는 방법은 다음과 같습니다.
먼저 트위닝하려는 클래스에 대해 TweenAccessor가 필요합니다.
public class RenderNodeTweenAccessor implements TweenAccessor<JJRenderNode> {
public static final int WIDTH = 1;
public static final int HEIGHT = 2;
public static final int WIDTH_HEIGHT = 3;
public static final int ALPHA = 4;
public static final int ALPHA_WIDTH_HEIGHT=5;
@Override
public int getValues(JJRenderNode target, int tweenType, float[] returnValues) {
switch (tweenType) {
case WIDTH:
returnValues[0] = target.getWidth();
return 1;
case HEIGHT:
returnValues[0] = target.getHeight();
return 1;
case WIDTH_HEIGHT:
returnValues[0] = target.getWidth();
returnValues[1] = target.getHeight();
return 2;
case ALPHA:
returnValues[0] = target.getColour().a;
return 1;
case ALPHA_WIDTH_HEIGHT:
returnValues[0] = target.getColour().a;
returnValues[1] = target.getWidth();
returnValues[2] = target.getHeight();
return 3;
default:
assert false;
return -1;
}
}
@Override
public void setValues(JJRenderNode target, int tweenType, float[] newValues) {
switch (tweenType) {
case WIDTH:
target.setWidth(newValues[0]);
break;
case HEIGHT:
target.setHeight(newValues[0]);
break;
case WIDTH_HEIGHT:
target.setWidth(newValues[0]);
target.setHeight(newValues[1]);
break;
case ALPHA:
target.getColour().a=newValues[0];
break;
case ALPHA_WIDTH_HEIGHT:
target.getColour().a=newValues[0];
target.setWidth(newValues[1]);
target.setHeight(newValues[2]);
default:
break;
}
}
}
상수의 int와 각각의 'tweenType'get 및 set 메소드는 필드의 두 개 이상의 조합을 트위닝 할 수 있습니다. 이 경우에는 JJRenderNode의 폭, 높이 및 알파 값의 조합이 다릅니다.
당신은 다음과 같이 TweenAccessor을 등록 할 수 있습니다
Tween.registerAccessor(JJRenderNode.class, new RenderNodeTweenAccessor());
을 그리고 당신은 예를 들어, 클래스를 트위닝 무료입니다 :
Timeline.createSequence()
.push(Tween.set(node, RenderNodeTweenAccessor.WIDTH_HEIGHT).target(START_WIDTH, START_WIDTH))
.push(Tween.to(node, RenderNodeTweenAccessor.WIDTH_HEIGHT, 0.4f).target(PuzzleBlockCore.MAX_RENDER_WIDTH, PuzzleBlockCore.MAX_RENDER_WIDTH))
.start(JJ.tweenManager);
PS. TweenManger의 인스턴스가 필요합니다.이 작업은 각 gameloop에 대해 델타로 업데이트해야합니다. 나는 어디에서나 사용할 수있는 '싱글 톤'글로벌 인스턴스를 가지고있다. (JJ.TweenManager).
애니메이션에 척추 2d를 사용할 수도 있습니다. 비용은 들지만 가치가 있습니다. $ 60 정도면, 당신은 libgdx를 완벽하게 지원하고 뼈대 장비와 애니메이션을 얻을 수 있습니다. 당신이 그러나 단지 libgdx와 애니메이션을 적용 할 경우
, 당신은 모든 스프라이트 애니메이션 프레임을 통해 루프 목록을 작성하고, 애니메이션의 다음 프레임으로 스프라이트 질감을 전환 할 수 있습니다.
private void render() {
sprite.set(aninationframes.get(currentFrame)
currentFrame = currentFrame + 1}
프레임 당 지연을 추가 할 수 있습니다.
If(current time - time > some value) {
sprite.set(animationframes.get(currrntFrame)
currentFrame = currentFrame + 1
time = get current time here
}
그건 내 아이디어이기도합니다. 더 나은 접근 방법이 필요했습니다. 감사 – pats
답장을 보내 주셔서 감사합니다. 스프라이트를 화면의 위에서 아래로 옮기고 싶다고합시다. – pats
@pats 예제를 추가하여 자신의 케이스에 맞는 지 확인할 수 있습니다. – BinaryMonkL