2012-02-08 138 views
2

下面的代碼是我現在所在的地方,我已經做到了,所以我可以點擊一個按鈕並從一個精靈畫面上的一個精靈變成另一個精靈。我正在制定的基本原則可能是廢話,我真的不知道我在做什麼!無論如何,如果是這樣,請直接引導我。如何使用monotouch和核心動畫動畫精靈圖表?

我想知道的是如何遍歷我的精靈表中的所有精靈。目前我可以通過點擊按鈕在第一個和第二個(僅一次)之間切換。

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); 
}; 

我期望這個過程是讓所有的子層加載/初始化,然後以某種方式循環它們。儘管如此,我還沒有想到如何實現這一目標。

這裏是我的測試spritesheet如果它可以幫助...
necromancer spritesheet

回答

3

有解決這個問題的方法很多,但如果你想使用CoreAnimation驅動紙張上的動畫,我的建議是,您使用關鍵幀動畫(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

太棒了,謝謝,我想這就是我要找的。然而,有沒有關於魔術「position.x」字符串意味着什麼的文檔?我在anim.Values行收到空引用異常,我試圖找出原因。我擔心這是因爲我不太瞭解前面的路線。谷歌搜索似乎舉例說明,但我沒有看到太多的解釋。 – Carter 2012-02-09 06:45:42