Ваша игра работает максимально быстро на одном ядре. Это нормально, в зависимости от того, что вы сделали.
Я не знаю, хотите ли вы получить БОЛЬШУЮ мощность (таким образом, достигнув 100%) или МЕНЬШЕ мощности (и использовать меньше энергии бедного пользователя...)
Если вы хотите получить БОЛЬШУЮ мощность, вам нужно каким-то образом использовать многопоточность, чтобы задействовать оба ядра. Поскольку я не сильно увлекаюсь потоковой передачей, я даже не буду пытаться объяснять, это совершенно не моя область.
Если вы хотите использовать МЕНЬШЕ энергии, есть также два варианта...
Одним из них является «выход», как его называют некоторые API-интерфейсы игровых библиотек (например, Allegro), он состоит из создания счетчика FPS и передачи управления процессору в каждом кадре в течение достаточного времени. Например, если ваша игра хочет работать со скоростью 120 кадров в секунду, а вы хотите, чтобы она работала со скоростью 60, вы можете дать ему примерно такое же количество времени, которое требуется для расчета кадра (около 8,3333... мс).
Другой - использовать основанный на событиях способ кодирования игры вместо зацикливания. В этой форме вы помещаете свой код в функцию с именем «Обновить», которая принимает в качестве аргумента количество времени, прошедшее с момента последнего вызова (очень важно это...). Это «обновление» может быть либо для всего приложения (более классическое), либо для каждого объекта, имеющего свое (популярное после изобретения Flash, которое использует это, как «OnEnterFrame», также Unity использует это и некоторые другие движки). И вы делаете код, который вызывает прерывание и вызывает это обновление, обычно просто таймер, который запускается в обычное время (16,6.... мс для 60 кадров в секунду, 33,33333... мс для 30 кадров в секунду).
Очевидно, что есть МНОГО и других способов, но я не буду объяснять их все, потому что этого достаточно для небольшой книги...
Я сам использовал различные подходы, мне нравится просто использовать полную мощность процессора (без многопоточности) и использовать все больше и больше системных оскорбительных эффектов по мере того, как мощность становится доступной. Но для более простых игр я обычно делаю цикл, который «уступает», проще всего обычно подсчитывая, сколько времени ушло на все вычисления, вычитаю это из 16,6 мс и вызываю функцию сна (которая дает управление ОС на это время) на результат... Например, если для расчета кадра потребовалось 3 мс, я вызываю сон (16-3). И несколько движков заставляют меня работать с "событийным стилем" (т.е. ввод осуществляется с прерываний клавиатуры, мыши и джойстика, а таймер прерывает и вызывает "Update(step)"), мне это не нравится, но мне пришлось научиться. ..
И последнее замечание: переменная «шаг», как я назвал (аргумент обновления), обычно используется в математической логике игры, например: «position.x = position.x + speed*step», чтобы заставить объект двигаться с фактической скоростью. постоянная скорость... (очевидно, используемая операция зависит от того, какой "шаг" представляет).
person
speeder
schedule
09.05.2010