2015-06-27 5 views
0

В SpriteBuilder, каждый объект начинается в кадре 0.Сделать объект появится в кадре N, а не кадр 0 в SpriteBuilder

У меня есть некоторые объекты, которые падают с неба, но я хочу их падения анимации (физика с гравитация), чтобы начать позже на сцене, а не на 0.

Могу ли я иметь объекты в определенном кадре? (т. е. вставить пустые кадры перед первым ключевым фреймом объекта), или я могу ли я, чтобы объекты опирались на физическую гравитацию после определенного кадра?

ТИА

ответ

1

Что вы хотите сделать, это может быть сделано с помощью сочетания Spritebuilder и кода. Невозможно оживить/переключить любые физические атрибуты на временной шкале Spritebuilder, но вы можете настроить свои собственные обратные вызовы для ее достижения. Чтобы добавить обратный вызов на временной шкале, вы удерживаете Alt/Option + левый клик в поле обратного вызова на временной шкале SB, а затем дважды щелкните маленький квадрат, чтобы установить селектор. Чтобы скрыть объект до тех пор, пока вы его не увидите, вы можете добавить «видимый» ключевой кадр: установите курсор во время отображения объекта и нажмите «v».

Итак, чтобы сделать то, что вы хотите, я снимет флажок «Пораженный гравитацией» в SBs «Физика элемента» -tab. (Очевидно, это заставит объект не упасть). Затем в определенный момент make объект видимый (если вы спрятали, то есть) и сделать обратный вызов на что-то вроде этого:

func toggleGravityCallBack() { 
    yourObject.physicsBody.affectedByGravity = true 
} 

Надеется, что это помогает

+0

это помогает, но я нашел, как сделать то, что вы описали, а также как получить обратный вызов в коде, который был моим окончательным подходом. – ericosg

+0

для тех, кто также ищет программные обратные вызовы, их можно выполнить с помощью CCActionCallBlock. – ericosg

1
int frameNum = 5; 

CCSpriteFrame* theframe = ((CCAnimationFrame*)[animation.frames objectAtIndex:frameNum]).spriteFrame; 

CCSprite* newSprite = [CCSprite spriteWithSpriteFrame:theframe]; 

Это создает новый спрайт, начиная с кадра пяти анимации.

+0

спасибо за это, но это означает, что это может быть сделано только программно, а не через SpriteBuilder? – ericosg

+0

Oooh ... Я не знаю ответа на эту часть. Я бы предположил «нет», поскольку я не видел нигде в редакторе, который вы бы указали на такую ​​вещь. – Almo

+0

Я не тестировал его. Кажется, я нашел скрытую технику добавления обратных вызовов в spritebuilder – ericosg