2012-02-08 14 views
2

以下のコードは私が今作成したところです。ボタンをクリックしスプライトシートのあるスプライトから別のスプライトに変更できるようにしました。私が取り組んでいる基本は、おそらく私がやっていることは分かりません。もしそうなら、私をまっすぐに操縦してください。モノトゥッチとコアアニメーションを使用してスプライトシートをアニメーション化するにはどうすればよいですか?

私が知りたいのは、スプライトシートのすべてのスプライトをループする方法です。現在、ボタンをクリックするだけで、1回目と2回目の間を1回だけ反転できます。

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ライン上でnull参照例外を取得しています、そして、私は理由を理解しようとしています。私はそれが前の行をよく理解していないのでそれが恐れる。グーグルが例を上げているようだが、私はあまり説明をしていない。 – Carter

関連する問題