2015-05-27 4 views
1

Я пытаюсь работать над новым игровым проектом, где я буду включать несколько уровней. Я читал этот вопрос (Sprite Kit - Defining the variables for multiple scenes) о лучшем способе делать мультипликационные сцены с минимальным дублирующим кодом. Конечно, ответ - это подклассы.Быстрые сцены с несколькими уровнями

Так сказать, я создаю свой «baseScene», который является подклассом SKScene. Здесь, как и было предложено, я должен поместить все соответствующие коды (игроки, объекты, коллизии бит-масок, прикосновения к функциям и т. Д.), Которые будут совместно использоваться во всех сценариях уровня подкласса. Я использовал обычную функцию moveToView в baseScene, чтобы добавить контент, и он отлично работает в нескольких сценах (level1Scene, level2Scene и т. Д.), Которые являются подклассами baseScene. То же самое касается прикосновений начатых функций и т. Д., Поэтому никаких проблем с этим.

Теперь моя проблема заключается в том, что в моей «level1Scene» я не могу на всю жизнь понять, как добавить материал, который находится поверх того, что находится в baseScene, например, врагов уровня 1, препятствий или фона. Я не могу использовать didMoveToView, так как это функция переопределения и удалит все, что я добавил в своем базовом классе baseScene.

Я был бы признателен за любую поддержку, и я извиняюсь, если это основной и, вероятно, глупый вопрос, но я довольно новичок в быстром, особенно подклассе сцены.

+0

Подождите, есть разница между SceneKit и SpriteKit. Кого вы ищете? – LinusGeffarth

+0

Вы говорите о 'zPosition'? Вы пытаетесь отобразить изображение поверх другого? Объясните больше о добавлении «вещей сверху» – Wraithseeker

ответ

3

Вы можете переопределить функции baseScene в level1Scene, вам просто нужно убедиться, что вы вызываете версию метода super. Вот несколько примеров, в вашем level1Scene классе:

override func didMoveToView(view: SKView) { 
    super.didMoveToView(view) // Calls `didMoveToView` of `baseScene`. 

    // Additional setup needed for `level1Scene`... 
} 

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    super.touchesBegan(touches, withEvent: event) // Calls `touchesBegan` of `baseScene`. 

    // Additional stuff you want to do in `level1Scene`... 
} 
+0

Именно это я и искал. Огромное спасибо. – crashoverride777

+0

Удивительно, я рад, что это работает для вас :) Кроме того, считаете ли вы правильность ответа на вопрос о ответе? – ABakerSmith

+0

Эй, я не буду без проблем, извините, я новичок на этом сайте, все еще пытаясь изучить макет. Если вы можете помочь мне с еще одной проблемой, я был бы так счастлив. Скажем, в моей «базовой сцене» у меня есть обнаружение столкновения (пусть groundCategory: UInt32 = 0x1 << 0 и т. Д.), И он отлично работает для подклассов. Однако я также получил еще одну сцену «player», которая является подклассом SKSpriteNode. Поскольку я не могу сделать это подклассом BaseScene, я изо всех сил пытаюсь распознать обнаружение столкновения в этой сцене. Каким будет правильный способ заставить PlayerScene также распознать столкновение. Вы звезда – crashoverride777

Смежные вопросы