Код:
TPlayerSprite1.Create(Engine).Image := ...
Это неправильно. Ведь получается, что в программе постоянно создаются экземпляры классов TPlayerSprite1, причем "зависших", т.е. на них нет ссылок. Из-за этого даже пристрелить мы их не можем (когда надо будет).
При такой организации ваша программа быстро забъет оперативку. Да и что делать с созданными в огромном количестве объектов, если они все равно не доступны.
Если уж объявлены переменные этих классов (PlayerSprite1), то и обращаться надо уже к ним:
Код:
PlayerSprite1.Image := ...