2013-12-03 1 views
6

Я создаю SKSpriteNode в didBeginContact метод с местом контакта:SKSPriteNode изменение положения в 0,0 без причины

CommonBox *boxTwo = [[CommonBox alloc] initWithTexture:[self.mainAtlas textureNamed:@"box07"]]; 
boxTwo.name = @"regularBox"; 
boxTwo.position = contact.contactPoint; 
[self addChild:boxTwo]; 

Положения является правильным здесь. Затем вызывается метод обновления, и позиция поля волшебным образом изменяется на 0,0 при запуске метода обновления, прежде чем выполняется какой-либо код. Почему это? Между этими двумя событиями не выполняется никакой другой код. Это сводит меня с ума. Я попытался удалить все конфликтующие и контактные битовые маски из этого объекта, но в любом случае он меняет нули. Объект является законным и так далее.

EDIT: если я удалю физическое тело с этого узла, я получу желаемое положение. Но как установить свою позицию узла, если у него есть физическое тело?

ответ

7

Я узнал свою ошибку - вам нужно создать физическое тело после установки позиции узла. Устанавливать положение после физического тела положение не делает ничего.

+0

Я просто столкнулся с этим сам и подозреваю, что это ошибка, поскольку это происходит только внутри метода обновления. При создании объектов во время настройки сцены не имеет значения, в каком порядке я устанавливаю позицию. Вы отправили радар с Apple? – macshome

+0

Я столкнулся с этим, так как я создал spritenode в качестве подкласса, и я создал также как SKspritenode внутри сцены, когда я запустил узел подкласса подкласса вне функции init сцены, позиция равна 0,0, когда я запускаю SKspritenode созданный в Сцене, это нормально, это не имеет никакого смысла ????? – TALAA

+2

Спасибо, мне жаль, что я не нашел это раньше. В моем случае это кажется непоследовательным. Иногда мои подклассы SKSpriteNodes могут задавать позиции после того, как физическое тело было создано, а другие нет. На данный момент я не вижу никаких различий между теми, кто работает, и теми, кто этого не делает, и будет мелить это как вероятную ошибку с каркасом. – Koop