AS3:精灵的x值不是数字吗?

时间:2018-02-22 21:43:10

标签: actionscript-3 properties sprite rounding

我发现这很奇怪:

    trace("typeof: ",typeof(sprite.x));
    trace("getClassName: ,getQualifiedClassName(sprite.x));
// Output:  typeof:  number
            getClassName:  int  

这是一个精灵的属性" x"一个号码? ......还是整数? ......都不是? ...都???

所以这就是:

    private function spriteTest():void {
        sprite = new Sprite;
        sprite.graphics.beginFill(0xff0000, 1);
        sprite.graphics.drawCircle(50, 50, 25);
        sprite.graphics.endFill();
        sprite.x = 0; sprite.y = 0; // default position
        trace("typeof: ",typeof(sprite.x));
        trace("getClassName: ",getQualifiedClassName(sprite.x));
        stage.addChild(sprite);
        sprite.addEventListener(MouseEvent.CLICK, moveit);

    }

    private function moveit(e:MouseEvent):void {
        var spriteTempX:Number = sprite.x;
        for (var i:int = 0; i < 1000; i++) {
            sprite.x += .1;
            spriteTempX += .1;
            trace(i,sprite.x, spriteTempX);
        }
    }
// Output: i       sprite.x    spriteTempX
            0        0.1         0.1
            1        0.2         0.2
            2        0.3         0.30000000000000004
            3        0.4         0.4
            4        0.5         0.5
            5        0.6         0.6
            6        0.7         0.7
            7        0.75        0.7999999999999999
            8        0.85        0.8999999999999999
            9        0.95        0.9999999999999999
            ...
            997      92.6        99.7999999999986
            998      92.65       99.8999999999986
            999      92.75       99.9999999999986

所以现在,我的精灵只移动了92(93?)像素,而不是99(100?)像素。

我可以通过将sprite.x值分配给spriteTempX的值来绕过这种创可贴风格,但我想知道是否有更优雅的解决方案。

  

显示对象的.x属性是什么?是否有更优雅的方式来完成我想要完成的事情?

0 个答案:

没有答案