Syntax 如何解决奇怪的Haxe编译器错误?

Syntax 如何解决奇怪的Haxe编译器错误?,syntax,compiler-errors,haxe,openfl,Syntax,Compiler Errors,Haxe,Openfl,我不认为我的语法在这里真的很糟糕。还是这样?这是我在OpenFL的第一次尝试 Haxe编译不正确?我是否缺少编译器指令?这个函数中是否存在语法错误?Flashdevelop中的语法检查器说不 命令如下: Running process: C:\Program Files (x86)\FlashDevelop\Tools\fdbuild\fdbuild.exe "C:\dev\Haxe\TestOpenFL\OpenFLTest.hxproj" -ipc 2e4ace78-45b9-4868-a2

我不认为我的语法在这里真的很糟糕。还是这样?这是我在OpenFL的第一次尝试

Haxe编译不正确?我是否缺少编译器指令?这个函数中是否存在语法错误?Flashdevelop中的语法检查器说不

命令如下:

Running process: C:\Program Files (x86)\FlashDevelop\Tools\fdbuild\fdbuild.exe "C:\dev\Haxe\TestOpenFL\OpenFLTest.hxproj" -ipc 2e4ace78-45b9-4868-a2dd-cf2c35265f44 -version "3.0.0" -compiler "C:\HaxeToolkit\haxe" -library "C:\Program Files (x86)\FlashDevelop\Library" -target "flash"
src/Main.hx:32:字符16-17:意外; 生成已暂停,但出现错误(haxelib.exe)。

function init() 
{
    if (inited) return;
    inited = true;

    //           \/ says this semicolon is unexpected. wtf 
    for (var i = 0; i < 200; i ++)
    {

        var bmd = new BitmapData( 100, 100, true, 0xff0000ff);
        var bmp = new Bitmap( bmd);

        addChild(bmp);

        bitmaps.push( bmp );            
    }

    addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
函数init()
{
如果(初始)返回;
inited=true;
//\/表示此分号意外。wtf
对于(变量i=0;i<200;i++)
{
var bmd=新的位图数据(100100,true,0xff0000ff);
var bmp=新位图(bmd);
addChild(bmp);
位图推送(bmp);
}
addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
这是整个剧本。我一辈子都搞不懂为什么会出错如果我只注释掉循环,它编译得很好。

class Main extends Sprite 
{
var inited:Bool;    
var bitmaps:Array<Bitmap>;

/* ENTRY POINT */   
function resize(e) 
{
    if (!inited) init();
    // else (resize or orientation change)
}

function init() 
{

    bitmaps = new Array();

    if (inited) return;
    inited = true;

    for (var i = 0; i < 200 ; i ++)
    {
        // Assets:
        var bmd = new BitmapData( 100, 100, true, 0xff0000ff);
        var bmp = new Bitmap( bmd);

        addChild(bmp);

        bitmaps.push( bmp );            
    }

    addEventListener( Event.ENTER_FRAME, onEnterFrame );
}

private function onEnterFrame(e:Event):Void 
{
}




/* SETUP */

public function new() 
{
    super();
    addEventListener(Event.ADDED_TO_STAGE, added);
}

function added(e) 
{
    removeEventListener(Event.ADDED_TO_STAGE, added);
    stage.addEventListener(Event.RESIZE, resize);
    #if ios
    haxe.Timer.delay(init, 100); // iOS 6
    #else
    init();
    #end
}

public static function main() 
{
    // static entry point
    Lib.current.stage.align = flash.display.StageAlign.TOP_LEFT;
    Lib.current.stage.scaleMode = flash.display.StageScaleMode.NO_SCALE;
    Lib.current.addChild(new Main());
}
class Main扩展了Sprite
{
变量初始化:Bool;
var位图:数组;
/*入口点*/
函数大小调整(e)
{
如果(!init)init();
//else(调整大小或方向更改)
}
函数init()
{
位图=新数组();
如果(初始)返回;
inited=true;
对于(变量i=0;i<200;i++)
{
//资产:
var bmd=新的位图数据(100100,true,0xff0000ff);
var bmp=新位图(bmd);
addChild(bmp);
位图推送(bmp);
}
addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
私有函数onEnterFrame(e:事件):Void
{
}
/*设置*/
公共职能(新增)
{
超级();
addEventListener(Event.ADDED_至_阶段,ADDED);
}
新增功能(e)
{
removeEventListener(Event.ADDED_至_阶段,ADDED);
stage.addEventListener(Event.RESIZE,RESIZE);
#如果ios
haxe.Timer.delay(init,100);//ios6
#否则
init();
#结束
}
公共静态函数main()
{
//静态入口点
Lib.current.stage.align=flash.display.StageAlign.TOP_左上;
Lib.current.stage.scaleMode=flash.display.StageScaleMode.NO_SCALE;
Lib.current.addChild(newmain());
}

}完成noob问题。直接投入,而不是阅读文档(这是最好的学习方式,IMHO)

不能在Haxe中使用循环。你必须使用迭代器

for (i in 0...200)
{
         //do stuff
}

第一件事:看看这个,它会帮助你解决很多未来的问题

接下来,Haxe中的for有点棘手,它是一种foreach,因此您可以这样使用它:

for(myElem in elements){
    // loop here
}
其中元素实现Itarable(如数组、GenericStack或映射)。但是,如果要增加变量,可以使用操作符
创建一个Iterable。因此,以您的代码为例:

for(i in 0...200){
    // loop here
}

在这里,
i
将取0到200之间的所有int值(不包括在内)

我不知道具体的Haxe,但是您应该尝试在循环外声明
I
(这样循环中就没有
var
)。我知道一些解析器对此有问题。实际上,请看这里:嘿,好的。我的语法对于迭代器来说是完全错误的。另外,我尝试在循环外声明I,这导致了其他错误。这仍然是一个for循环,只是不是“普通的旧”c风格的味道。但是迭代器不依赖类型来确定next()运算符吗?而(setIterator.hasNext()){..}与一个不管列表如何都会执行迭代的循环相比?嗯,不确定引擎盖下会发生什么,但可能。。。运算符表示“不要使用迭代器”,而(x in y)的e4x语法使用迭代器。我的意思是,我们通常认为“循环”是某种重复。循环有几种类型,迭代器的使用就是其中之一。for的“普通旧”c样式是另一种循环类型。在实现方面,Haxe的
a…b
被键入为
IntIterator
,但循环将编译为普通while循环。但无论如何,这肯定是一个循环。顺便说一句,我想既然两者都。。。老式的循环语法通过Flashdevelop语法检查器是可以的,我想知道这个设置是否可以在FD中更改。我想这完全是另一个问题。