Исключение класса не найдено при импорте класса: Haxe (с библиотеками OpenFL + Flixel)

Я недавно начал возиться с HaxeFlixel и при попытке сделать действительно простую игру я сталкиваюсь с этой ошибкой:

source/PlayState.hx:10: characters 7-16 : Class not found : GameLogic

Теперь это не мой первый опыт программирования игр или чего-то еще, но я понятия не имею, почему эта ошибка появляется. Начнем с того, что GameLogic - это даже не класс, а пакет. Ошибка появляется, когда я пытаюсь импортировать свой базовый класс Player из моего пакета GameLogic.

Мой Базовый Класс Игрока:

 package GameLogic;

 import flixel.FlxSprite;
 import flixel.util.FlxColor;

 class Player extends FlxSprite {

     public function new(X:Float=0, Y:Float=0) {
         super(X, Y);
         makeGraphic(32, 32, FlxColor.WHITE);
     }

 }

Где выдается исключение:

     import GameLogic.Player;

 class PlayState extends FlxState{

     private var p:Player;

     override public function create():Void{
         p = new Player(20, 20);
         add(p);
         super.create();
     }

Моя [соответствующая] структура каталогов:

  | src
  | | GameLogic
  | | | Player.hx
  | | PlayState.hx

1 ответ

Решение

Как сказано в документах Haxe:

Каждая часть пути в именах пакетов должна начинаться со строчной буквы, и, как и у всех типов, имена типов в пакетах должны начинаться с заглавной буквы. Следовательно, My.Pack является недопустимым пакетом, как и my.Pack. Точно так же my.pack.e не будет правильным именем типа или импорта

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

Определить: Модуль

Весь код Haxe организован в модули, которые адресуются путями. По сути, каждый файл.hx представляет модуль, который может содержать несколько типов. Тип может быть закрытым, и в этом случае только содержащий его модуль может получить к нему доступ.

Различие модуля и содержащего его типа с тем же именем размыто по дизайну. Фактически, обращение к haxe.ds.StringMap можно считать сокращением для haxe.ds.StringMap.StringMap. Последняя версия состоит из четырех частей:

  1. пакет haxe.ds
  2. имя модуля StringMap
  3. имя типа StringMap
  4. параметр типа Int

Алгоритм разрешения имен изложен здесь более подробно.

Другие вопросы по тегам