【问题标题】:Class Not Found Exception When Importing a Class: Haxe (With OpenFL + Flixel libraries)导入类时未找到类异常:Haxe(使用 OpenFL + Flixel 库)
【发布时间】:2014-12-14 15:53:53
【问题描述】:

我最近开始摆弄 HaxeFlixel,在尝试制作一个真正简单的游戏时,我遇到了这个错误:

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

现在这不是我第一次涉足编程游戏或其他任何事情,但我不知道为什么会弹出这个错误。对于初学者来说,GameLogic 甚至不是一个类,它是一个包。当我尝试从 GameLogic 包中导入基本 Player 类时出现错误。

我的基本玩家课程:

 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

【问题讨论】:

  • 我的第一个疯狂猜测是您必须使用小写首字母编写 GameLogic 才能被识别为包名称gameLogic

标签: packages importerror haxe directory-structure haxeflixel


【解决方案1】:

正如Haxe docs 所说:

包名称中路径的每个部分都必须以小写字母开头,并且与所有类型一样,包中的类型名称必须以大写字母开头。因此 My.Pack 是一个无效的包,my.Pack 也是如此。同样,my.pack.e 不是有效的类型名称或导入

你必须用小写的G 命名你的包gameLogic 才能被识别为正确的包名。 up-to-date docs 中的相关部分读起来稍微复杂一些,但本质上与这个问题的含义相同:

定义:模块

所有 Haxe 代码都组织在模块中,使用 路径。本质上,每个 .hx 文件代表一个模块,其中可能包含 几种类型。一个类型可能是私有的,在这种情况下只有它的 包含模块可以访问它。

一个模块和它的同名包含类型的区别 设计模糊。其实寻址 haxe.ds.StringMap 可以 被认为是 haxe.ds.StringMap.StringMap 的简写。后者 版本由四部分组成:

  1. 包 haxe.ds
  2. 模块名称 StringMap
  3. 类型名称 StringMap
  4. 类型参数 Int

更详细地概述了名称解析算法here

【讨论】:

    猜你喜欢
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多