Исключение класса не найдено при импорте класса: 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. Последняя версия состоит из четырех частей:
- пакет haxe.ds
- имя модуля StringMap
- имя типа StringMap
- параметр типа Int
Алгоритм разрешения имен изложен здесь более подробно.