-
Предлагается готовый проект, выполненный нашей командой, это игра. Нужно добавить второе оружие в игру - пулемёт. Он стреляет 5 пуль в секунду. Графика для него есть в архиве. Пули должны вылетать с некоторым разбросом. Разброс пуль и скорость стрельбы задаются параметрами внутри кода. Возможна и более быстрая стрельба, до 30 пуль в секунду.
-
Дать рецензию на код, предложить улучшения на свой вкус и взгляд.
-
Добавить TypeScript.
-
Вынести магические числа в константы.
-
Описать класс
AbstractWeapon
, унаследовать от негоAbstractAutoWeapon
(автоматическое оружие) иAbstractSemiAutoWeapon
(полуавтоматическое оружие) и, в конце концов,MachineGun
иPistol
. Использовать разную логику в зависимости от типа оружия. -
Инкапсулировать классы.
-
Не передавать неиспользуемые аргументы
start
иforward
.
// Player.js, строка 8
this.weapons[this.currentWeaponIndex].shoot(start, forward);
- Разные кавычки в импортах (
Pistol.js
,Level.js
,Game.js
).
// Pistol.js, строки 2-3
import { Bullet } from '../Bullet';
import { AdvancedDynamicTexture, Image, Control } from "@babylonjs/gui";
-
Использовать
requestAnimationFrame
вместоsetInterval
. При высокой нагрузкеsetInterval
выполняется слишком поздно и перестаёт стрелять, а анимация зависает (решил проблему дляMachineGun
). -
Использовать Instances для повторяющейся геометрии. Под уровнем расположены 7000 кубов, которые, видимо, нужны для имитации сложной сцены. В случае, если действительно необходимо отобразить нечто подобное, создавать 7000 новых
Mesh
не стоит. При возможности замораживать объекты (с помощьюfreezeWorldMatrix
иfreezeWorldMesh
) и не просчитывать лишние столкновения. -
Не создавать новый материал для каждой новой декали, переиспользовать.
-
Пули не исчезают после столкновения с объектом.
-
Управление клавиатурой не работает при русской раскладке.
-
Не работает
Inspector
.