سؤال

واني اسعى الى تطوير لعبة الروليت آيفون. كيف يمكنني الرسوم المتحركة (دورة) مجلس الروليت؟

هل كانت مفيدة؟

المحلول

وليس لدي أي فكرة عن كيفية القيام بذلك في cocos2d (أو حتى ما وهذا هو)، ولكن يمكنك القيام بذلك باستخدام الأساسية الرسوم المتحركة إما مع CALayers أو UIViews. ربما أبسط وسيلة سيكون لإنشاء UIImageView يحتوي على صورة من عجلة الروليت وتحريك ذلك.

لتحقيق ذلك، أولا إعداد UIImageView الخاص بك عن طريق تهيئة مع صورة عجلة الروليت الخاص بك. عندما تريد العجلة في الدوران، استخدام التعليمات البرمجية التالية:

CATransform3D rotationTransform = CATransform3DMakeRotation(1.0f * M_PI, 0, 0, 1.0);

CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];

rotationAnimation.toValue = [NSValue valueWithCATransform3D:rotationTransform];
rotationAnimation.duration = 0.25f;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = 10; 

[rotatingImage.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];

وعلى افتراض أن rotatingImage هو UIImageView الخاص بك.

في هذا المثال، فإن عجلة تدوير 5 مرات، مع كل دوران اتخاذ 0.5 ثانية. يتم تقسيم التناوب في النصف بسبب الأساسية الرسوم المتحركة سوف تذهب إلى الدولة القادمة الأقرب، وبالتالي فإن معظم يمكنك تدوير شيء هو نصف دوران قبل الحركة يريد أن تدوير في الاتجاه الآخر. وهذا يعني أن بي راديان (180 درجة) دوران هنا يذهب نصف دائرة، ولكن إذا كنت تستخدم (1.5f * بي) لزاوية دوران الخاص بك، فإنه يذهب على بعد ربع دائرة. وبالمثل، إذا كنت تستخدم (0.999f * بي)، فإن دائرة تدور بطريقة عقارب الساعة.

وأنت تريد تنفيذ تسارع وتباطؤ عجلة الخاص بك، وبالنسبة لأولئك على CAKeyframeAnimation ستأخذ مكان CABasicAnimation في هذا المثال.

نصائح أخرى

وانها بسيطة جدا في Cocos2D:

[sprite runAction:[RotateBy actionWithDuration:dur angle:360]];

ولجعل دورة واحدة أو

id action = [RepeatForever actionWithAction: [RotateBy actionWithDuration:dur angle:360]];
[sprite runAction:action];

و

[sprite stopAction:action];

وإذا كنت بحاجة إلى تدوير باستمرار.

لا تنس للتأكد من أن يتم تعيين العفريت transformAnchor إلى مركز للصورة. وأعتقد أن تنشأ السؤال التالي - كيفية جعله يتوقف بشكل سلس، و)

والمزيد من المعلومات عن الإجراءات: HTTP: // lethain كوم / دخول / 2008 / أكتوبر / 03 / الملاحظات على اساس cocos2d-فون التنمية (وانها لنسخة قديمة، لذلك يستخدم إهمال 'لا' بدلا من 'runAction')

ويمكنك تدوير وجهة نظر، من قبل بعض عدد من راديان، بغض النظر عما إذا كان أقل من دورة كاملة أو عدة مضاعفات دورة كاملة، دون الحاجة إلى تقسيم دوران إربا. وكمثال على ذلك، فإن البرمجية التالية تدور وجهة نظر، مرة واحدة في الثانية الواحدة، لعدد محدد من الثواني. يمكنك تعديل بسهولة أن تدور يرى عدد معين من الدورات، أو من قبل بعض عدد من راديان.

- (void) runSpinAnimationWithDuration:(CGFloat) duration;
{
    CABasicAnimation* rotationAnimation;
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ];
    rotationAnimation.duration = duration;
    rotationAnimation.cumulative = YES;
    rotationAnimation.repeatCount = 1.0; 
    rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

    [myView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}

وهناك عدة طرق يمكنك أن تفعل ذلك.

إذا كان لديك الرسوم المتحركة الإطار حسب الإطار لعجلة القيادة، وتحقق من AtlasDemo (جزء من توزيع cocos2d).

وعلى خلاف ذلك، نلقي نظرة على RotateBy العفريت و: طريقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top