2013-09-26 10 views
8

Używam wielu funkcji CCEase* w Cocos2D opisanych here. iOS 7 Zestaw Sprite posiada również SKActionTimingMode. Jednak tylko proste tryby. Jak uzyskać CCEaseElasticIn lub CCEaseBounceIn podobne efekty przy użyciu zestawu Sprite Kit?Jak zastosować różne efekty łagodzenia, aby spryskać akcję?

+0

Chyba Apple chce nam korzystać customActionWith ... o takich przypadkach. – LearnCocos2D

+0

Czy masz pojęcie, jak to zrobić, używając 'customActionWith'? – Pablo

+1

tylko koncepcyjnie, ogólną ideą jest wykorzystanie czasu, który upłynął, jak również czas trwania i karmienie obu działań, aby określić, jak bardzo pożądana właściwość (tj. Pozycja) powinna się zmienić w dowolnym elapsedTime. Funkcja rozluźniania, którą można zaadaptować na przykład z cocos2d. – LearnCocos2D

Odpowiedz

33

Rozluźnienie lewe (lub tweening) Sprite Kit celowo ograniczone z oczekiwaniem, że programista przejmie kontrolę nad specyfiką ruchu duszków. Zasadniczo, musisz zrobić niestandardową akcję i zastosować krzywą dynamiki do parametru przed zmianą właściwości (obrót, położenie, skala itp.) Ikonki. Oto przykład.

CGFloat initialScale = mySprite.xScale; 
SKAction *scaleAction = [SKAction customActionWithDuration:duration actionBlock:^(SKNode *node, CGFloat elapsedTime) { 
    CGFloat t = elapsedTime/duration; 
    CGFloat p = t*t; 
    CGFloat s = initialScale*(1-p) + scale * p; 
    [node setScale:s]; 
}]; 
[mySprite runAction:scaleAction]; 

Częścią określającą luzowanie jest p = t*t. Więc p jest funkcją t takie, że:

  • gdy t wynosi 0, p jest 0
  • gdy t wynosi 1, p jest 1

Oznacza to, że można rozpocząć się początek i koniec na końcu, ale kształt krzywej pomiędzy nimi określi, w jaki sposób się tam dostaniesz. Funkcje wygładzania mogą być proste, podobnie jak tutaj pokazane, co jest w zasadzie łatwym lub dość skomplikowanym, na przykład elastycznym lub odbiciem. Aby wygenerować swój własny, spróbuj tego: http://www.timotheegroleau.com/Flash/experiments/easing_function_generator.htm Albo przyjąć bardziej szczegółowe spojrzenie na równaniach Robert Penner za: http://www.robertpenner.com/easing/

+0

Doskonała odpowiedź i podziękowania za linki! Awansuj i zaakceptuj! – Pablo

+0

Kolejny dobry link do matematycznej implementacji różnych typów funkcji rozluźniających znajduje się na stronie: https://github.com/warrenm/AHEasing – vim

+0

Jak zastosowalibyśmy to do 'SKAction followPath'? – Jonny

2

Dla niepożądanego poluzowania, odpowiedź Kardasis' mówi wszystko.

Jeśli szukasz łatwego sposobu dodania efektu podskakującego do animacji, to jest zgodne ze sposobem, w jaki robi się wszystko w UIKit, mam coś dla ciebie.

Apple wprowadził animacje wiosenne w UIKit kilka lat temu, pozwalając ustawić tłumienie sprężyny i prędkość początkową podczas wykonywania animacji UIView. Niestety nie wdrożyli tego w SpriteKit, więc stworzyłem własną bibliotekę, która właśnie to robi.

Jest to zestaw rozszerzeń w SKAction, które replikują większość fabrycznych metod, dodając parametry tłumienia i prędkości.

Kod jest na GitHub, czuć się swobodnie z niego korzystać: https://github.com/ataugeron/SpriteKit-Spring

Powiązane problemy