Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 int工作正常,但会导致一些不平稳的运动。。。数字在AS3中导致奇怪的行为_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 int工作正常,但会导致一些不平稳的运动。。。数字在AS3中导致奇怪的行为

Actionscript 3 int工作正常,但会导致一些不平稳的运动。。。数字在AS3中导致奇怪的行为,actionscript-3,flash,Actionscript 3,Flash,注意,我对这整件事还很陌生,所以如果我使用了一些不正确的措辞,我道歉 创建类时,Number数据类型是否会导致问题?我有一个名为Asteroid的类,当它被实例化时,我会声明一些在运行时分配值的属性,例如.zVelocity、.xVelocity和.yVelocity。当它们被声明为int数据类型时,一切都可以编译并运行良好,但当通过三角函数更改属性时,我会遇到一些急促的动作。所以我把它们都改成了Number数据类型,突然发生了一些非常奇怪的事情。。。运行.swf时,小行星实例不再加载到正确的.

注意,我对这整件事还很陌生,所以如果我使用了一些不正确的措辞,我道歉

创建类时,
Number
数据类型是否会导致问题?我有一个名为
Asteroid
类,当它被实例化时,我会声明一些在运行时分配值的属性,例如
.zVelocity
.xVelocity
.yVelocity
。当它们被声明为
int
数据类型时,一切都可以编译并运行良好,但当通过三角函数更改属性时,我会遇到一些急促的动作。所以我把它们都改成了
Number
数据类型,突然发生了一些非常奇怪的事情。。。运行
.swf
时,
小行星
实例不再加载到正确的
.x
.y
坐标。相反,所有加载都将加载到左上角的
stage
对象的原点。如果我将
.xVelocity
数据类型更改回
int
,则所有
精灵
对象将沿
舞台顶部水平渲染。我希望这是有意义的。我可以上传文件,但我需要一些指导

package {

import flash.display.Sprite;

public class Asteroid extends Sprite {

    var xVelocity: Number;
    var yVelocity: int;
    //var zVelocity: Number;
    var velocity: Number;
    var factor: uint;

    public function Asteroid(): void {

        //xVelocity = Math.floor(Math.random()*6)-3;
        //yVelocity = Math.floor(Math.random()*4)-2;
        //zVelocity = Math.floor(Math.random()*4);
    }
}
}
和我的文档

        //////
        //    TIMER
        //////
        timer.start();
        timer.addEventListener(TimerEvent.TIMER, timerFunction);
        timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerComplete);

        function timerFunction(e: TimerEvent): void {
            //trace("length: " + asteroids.length);
            if (asteroids.length < 1000) {
                newAsteroid();
            }


            for (var i: int = 0; i <= asteroids.length - 1; i++) {

                asteroids[i].alpha -= .05;
                asteroids[i].x += asteroids[i].xVelocity;
                asteroids[i].y += asteroids[i].yVelocity;
                //asteroids[i].z += asteroids[i].zVelocity;
                //asteroids[i].zVelocity += .1 ;
                //asteroids[i].xVelocity /= 1.1;
                //asteroids[i].yVelocity /= 1.1;

                if (asteroids[i].alpha <= .05) {
                    asteroids.splice(i, 1);
                    removeChild(asteroids[i]);
                    i--;
                }

            }

        }

        function timerComplete(e: TimerEvent): void {
            trace("stop");
        }


        //////
        //    Asteroids
        //////
        function newAsteroid(): void {

            for (var i: int = 0; i <= 100; i++) {

                var idx: int = Math.floor(Math.random() * colorArray.length);

                asteroid = new Asteroid();
                asteroid.x = (Math.random() * stage.stageWidth * .5 + stage.stageWidth * .25) as Number;
                asteroid.y = (Math.random() * (stage.stageHeight - 100) + 50) as Number;
                asteroid.graphics.lineStyle();
                asteroid.graphics.beginFill(colorArray[idx], .6);
                asteroid.graphics.drawRect(0, 0, 5, 5);
                addChild(asteroid);
                asteroids.push(asteroid);
            }
        }

    }
}
//////
//计时器
//////
timer.start();
timer.addEventListener(TimerEvent.timer,timerFunction);
timer.addEventListener(TimerEvent.timer\u COMPLETE,timer COMPLETE);
函数timerFunction(e:TimerEvent):无效{
//轨迹(“长度:”+小行星。长度);
如果(小行星长度<1000){
新小行星();
}

for(var i:int=0;iint类型的默认值为0,这就是它们在您的情况下工作的原因,但缺点是它们会将所有值取整为整数,这会在动画中产生奇怪的效果

数字类型的默认值为NaN(不是数字),这就是您遇到很多麻烦的原因

你从不给你的变量一个默认值(你从不实例化它们),在int的情况下,因为它们从零开始起作用,但在Number的情况下,因为它们从NaN开始作为默认值,所以不起作用。你一直尝试使用这些变量,但它们一直只返回NaN,什么都不起作用

我猜你现在知道该怎么做了,但万一:


在使用之前给变量一个值!

Hmm这很奇怪,应该以同样的方式处理数字。但是关于抖动运动-可能是因为有1000个半透明的矢量绘制小行星,这需要绘制很多:)当然也取决于帧速率和计时器间隔(看起来您是根据计时器移动它们的?)@neal davis你的代码看起来很好。在所有情况下都会返回一个整数…使用
Number
int
,代码应该可以正常工作,我用这两种类型对它进行了测试,它工作得很好。尝试清理你的项目,在IDE中关闭并重新打开它,然后再次编译…@Philarmon是的,它们根据计时器移动。帧老鼠“平滑”并不是我所看到的急促的动作。我将更新我的原始帖子,进一步解释到底什么是“急促的”。我知道这可能是一个与我帖子的主要问题完全无关的问题,但它实际上可能根源于同一个问题。就是这样!我觉得很愚蠢:)但我想这就是学习有时的感觉。