2012-02-08 6 views
2

아래의 코드는 버튼을 클릭하고 스프라이트 시트의 한 스프라이트에서 다른 스프라이트 시트로 변경할 수 있도록 작성했습니다. 나가 일하고있는 근본은 쓰레기일지도 모른다, 나는 진짜로 나가하고있는 무슨을 모른다! 꼭 그렇다면 나를 조종 해주십시오.모노 터치와 코어 애니메이션을 사용하여 스프라이트 시트를 어떻게 애니메이트합니까?

내가 알고 싶은 것은 스프라이트 시트의 모든 스프라이트를 반복하는 방법입니다. 현재 버튼 클릭으로 첫 번째와 두 번째 사이를 전환 할 수 있습니다 (한 번만).

UIImageView test = new UIImageView(); 
test.Image = UIImage.FromFile("necromancerSpriteSheet.png"); 

CGImage img = test.Image.CGImage; 
CALayer layer = new CALayer(); 

layer.Contents = img; 
layer.Bounds = new RectangleF(0, 0, 128, 128); 
layer.Position = new PointF(150, 250); 

UIImageView theImage = new UIImageView(); 

layer.ContentsRect = new RectangleF(0, 0, 0.33f, 0.33f); 
layer.RemoveAllAnimations(); 
theImage.Layer.AddSublayer(layer); 

button.TouchUpInside += (s, e) => {    
    layer.ContentsRect = new RectangleF(0.33f, 0, 0.33f, 0.33f); 
    layer.RemoveAllAnimations(); 
    theImage.Layer.AddSublayer(layer); 
}; 

이 프로세스는 모든 하위 레이어를로드/초기화 한 다음 어떤 방식으로 루프를 반복하는 것으로 예상됩니다. 나는 이것을 달성하는 방법을 아직 생각해 내지 못한 행운이 없었다. 도움이된다면 여기

이이 문제를 해결하는 여러 가지 방법이 있지만 당신이 시트에 애니메이션을 구동하기 위해 코어 애니메이션을 사용하려는 경우, 내 제안이다 ...
necromancer spritesheet

답변

3

내 테스트 spritesheet입니다 키 프레임 애니메이션 (CAKeyFrameAnimation)을 사용하여 애니메이션을 구동합니다. 일을 단순화하기 위해

, 나는 단지 하나의 행에있는 모든 항목을 넣어, 다음과 같이 사용합니다 : 당신은 약간 위의 애니메이션을 조정할해야 할 수도 있습니다

var anim = (CAKeyFrameAnimation) CAKeyFrameAnimation.FromKeyPath ("position.x"); 
anim.Values = new NSNumber [9]; 
var times = new NSNumber [9]; 
for (int i = 0; i < 9; i++){ 
    anim.Values [i] = NSNumber.FromFloat (i*WIDTH); 
    times [i] = NSNumber.FromFloat (i/9f); 
} 
anim.CalculationMode = CAKeyFrameAnimation.CalculationDiscrete 

을, 나는하지 않고 위를했다 테스트.

+1

굉장합니다, 고마워요, 제가 생각한 것 같아요. 그러나 거기에 magic "position.x"문자열이 의미하는 것에 관한 문서가 있습니까? 나는 anim.Values ​​라인에 null 참조 예외를 얻고 있는데 왜 그 이유를 알아 내려고하고 있습니다. 나는 그것이 이전 선을 충분히 이해하지 못하기 때문에 그것이 두렵다. 인터넷 검색은 예제를 보여 주지만 많은 설명을 보지 못했습니다. – Carter

관련 문제