CS6错误1046:未找到类型或不是编译时常量:Vector3D

时间:2014-06-11 05:07:01

标签: actionscript-3 flash-cs6

我正在尝试使用向量使敌人的轨道成为目标(玩家的船)。但是,我一直得到错误1046.任何建议?错误发生在Game.as文件中包含drawForceVector函数的行上。

这是我的Game.as文件代码:

    package{

    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Vector3D;
    import flash.text.TextField;

    public class Game extends MovieClip
    {
        public static var mouse :Vector3D = new Vector3D(100, 100);

        public var boids :Vector.<Boid> = new Vector.<Boid>;
        public var forces :Sprite;

        public function Game() {
            addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e :Event) :void {
            var i :int, boid :Boid;

            for (i = 0; i < 2; i++) {
                boid = new Boid(stage.stageWidth * Math.random(), stage.stageHeight * Math.random(), 20 +  Math.random() * 20);

                addChild(boid);
                boids.push(boid);
            }

            forces = new Sprite();
            addChild(forces);
        }

        public function update():void {
            var i :int;

            forces.graphics.clear();

            for (i = 0; i < boids.length; i++) { 
                boids[i].update();
                drawForces(boids[i]);
            }
        }

        private function drawForces(boid :Boid) :void {
            var desired  :Vector3D = boid.desired.clone();
            var velocity :Vector3D = boid.velocity.clone();
            var steering :Vector3D = boid.steering.clone();

            velocity.normalize();
            desired.normalize();
            steering.normalize();

            // Force vectors
            drawForceVector(boid, velocity, 0x00FF00);      
            drawForceVector(boid, desired, 0x454545);
            drawForceVector(boid, steering, 0x0000FF);

            // Target
            forces.graphics.lineStyle(1, 0x323232);
            forces.graphics.beginFill(0x323232);
            forces.graphics.drawCircle(mouse.x, mouse.y, 10);
            forces.graphics.endFill();
        }

        private function drawForceVector(boid :Boid, force :Vector3D, color :uint, scale :Number = 100) :void {        //ERROR OCCURS ON THIS LINE
            forces.graphics.moveTo(boid.x + boid.width / 2, boid.y + boid.height / 2);
            forces.graphics.lineStyle(2, color);
            forces.graphics.lineTo(boid.x + force.x * scale, boid.y + force.y * scale);
        }
    }
}

Boid.as代码:

    package  {

    import flash.display.MovieClip;
    import flash.geom.Vector3D;
    import flash.object.Vector3D;

    public class Boid extends MovieClip
    {
        public static const MAX_FORCE       :Number = 0.4;
        public static const MAX_VELOCITY    :Number = 3;

        public var position     :Vector3D;
        public var velocity     :Vector3D;
        public var target       :Vector3D;
        public var desired      :Vector3D;
        public var steering     :Vector3D;
        public var mass         :Number;

        public function Boid(posX :Number, posY :Number, totalMass :Number = 20) {
            position = new Vector3D(posX, posY);
            velocity = new Vector3D(-1, -2);
            target   = new Vector3D(310, 240);
            desired  = new Vector3D(0, 0); 
            steering = new Vector3D(0, 0); 
            mass     = totalMass;

            truncate(velocity, MAX_VELOCITY);

            x = position.x;
            y = position.y;

            graphics.beginFill(0xFF0000);
            graphics.drawRect(0, 0, 20, 20);
            graphics.endFill();
        }

        private function seek(target :Vector3D) :Vector3D {
            var force :Vector3D;

            desired = target.subtract(position);
            desired.normalize();
            desired.scaleBy(MAX_VELOCITY);

            force = desired.subtract(velocity);

            return force;
        }

        public function truncate(vector :Vector3D, max :Number) :void {
            var i :Number;

            i = max / vector.length;
            i = i < 1.0 ? 1.0 : i;

            vector.scaleBy(i);
        }

        public function update():void {
            target = Game.mouse;

            steering = seek(target);

            truncate(steering, MAX_FORCE);
            steering.scaleBy(1 / mass);

            velocity = velocity.add(steering);
            truncate(velocity, MAX_VELOCITY);

            position = position.add(velocity);

            x = position.x;
            y = position.y;
        }
    }
}

Main.as代码:

    package {

    import flash.display.Sprite;
    import flash.events.*;

    [SWF(width = "600", height = "480")]

    public class Main extends Sprite 
    {
        private var game :Game = new Game();

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            stage.addEventListener(Event.ENTER_FRAME, enterFrame);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
            stage.frameRate = 30;

            addChild(game);
        }

        private function mouseMove(e :MouseEvent) :void {
            Game.mouse.x = e.stageX;
            Game.mouse.y = e.stageY;
        }

        private function enterFrame(e :Event) :void {
            game.update();
        }
    }
}

非常感谢。

1 个答案:

答案 0 :(得分:0)

播放器的目标版本必须高于您所拥有的版本 - Flash Player 9.正如reference所示,它表示Vector3D包含在:运行时版本:Flash Player 10,AIR 1.5 。所以基本上你是为那么老的Flash Player构建的,它仍然没有这个类。

只需将目标版本更改为最新版本,并确保它高于Flash Player 10.这将完成工作! :)