2016-09-05 3 views
1

Я делаю свою первую игру с Swift и SpriteKit и заметил, что моя игра быстро приближается к 100% использованию процессора. Я недавно публиковал об этом недавно, но сейчас я сейчас пытаюсь разделить его, чтобы определить, где мои проблемы. Первоначально я думал, что моя проблема заключалась в создании новых врагов, поэтому я удалил все, кроме маленького контролируемого пользователем космического корабля и его функции съемки. Тем не менее, я по-прежнему проигрываю 100% после пары минут «игры». Я использую инструмент профилирования времени, чтобы попытаться выяснить, что происходит, но у меня проблемы. Я разбил временную строку:Высокое использование ЦП в игре SpriteKit

Вот первый подграф, когда пользователь нажимает кнопку homeScene, чтобы ввести GameScene. enter image description here

Я не совсем уверен, что означают красные и желтые «самые тяжелые задники» с 3256x и 861x, но из учебников, которые я видел, я бы предположил, что они аномально высоки. Вот дерево вызовов, а также: enter image description here

Я тоже не совсем уверен, почему текстуры контроллер будет использовать так же, как они просто установив две текстуры в файле непосредственно перед GameScene класса:

let controllerBaseTexture = SKTextureAtlas(named:"Sprites").textureNamed("controllerBase") 
let controllerHandleTexture = SKTextureAtlas(named:"Sprites").textureNamed("controllerHandle") 

class GameScene: SKScene, SKPhysicsContactDelegate { 

Тогда вот дерево вызовов, когда начинается игра, и когда CPU достигает 100%: enter image description here

Я тоже запутался о том, что «UnsaveMutableAddressors», как я вижу их очень часто при попытке отладить этот код.

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

Спасибо за помощь!

+0

Вы действительно подсчитали количество раз, когда вызывается startGame? Теоретически его следует называть только один раз? –

+0

Вы вызываете GameScene.init из каждого вызова update(). Исправьте основную логику вашей игры, поскольку это явно не то, что нужно делать в обновлении. – MoDJ

+0

@MobileBen @ MoDJ Вы говорите строго о начале раздела - во время загрузки? Потому что там есть задержка, и это будет иметь смысл, но реальной проблемой является использование ЦП во время игры (средняя часть), которая не имеет никакой конкретной ссылки AlienAnnhilator? – Sam

ответ

1

Профилировщик показывает, что это что-то в вашем методе обновления для вашей игрыScene. Имейте в виду, что это происходит примерно 60 раз в секунду, поэтому вы не хотите делать что-то чрезвычайно тяжелое.

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