从另一个类继承MovieClip

时间:2013-12-12 10:58:40

标签: actionscript-3 flash class inheritance movieclip

嘿我似乎在从一个类继承Movie-clip时遇到了一些问题,我对as3很新,我已经看了一眼,无法判断我是否做了一些根本错误的事情。

让我告诉你

所以我有一个课我想用来移动一切但玩家精灵。所以除了玩家之外我想要的一切都是为了扩展它。 (或者我假设。)

所以我宣布我的班级

package code {
import flash.display.*;
import flash.events.*;
import flash.ui.*;
import code.Main;

public class everythingContainer extends MovieClip {

功能括号等...... (我只是为了避免错误而导入所有内容)

然后我有一个类我想继承everythingContainer和Movieclip

package code {

import flash.display.*;
import flash.events.*;
import flash.ui.*;
import code.Main;
import code.everythingContainer;

public class Tree1 extends everythingContainer {

然而,当我运行这个时,我得到了错误: 第1行5000:类'code.Tree1'必须是'flash.display.MovieClip'的子类,因为它链接到该类型的库符号。

为什么我收到此错误?

非常感谢任何帮助!

我还没有运行完整的代码,所以可能还有其他明显的错误。

everythingContainer

完整代码:

    package code {
    import flash.display.*;
    import flash.events.*;
    import flash.ui.*;
    import code.Main;

    public class everythingContainer extends MovieClip {
        var speed: Number = 4;
        var wpressed: Boolean = false;
        var apressed: Boolean = false;
        var spressed: Boolean = false;
        var dpressed: Boolean = false;
        var xprev:int = 0;
        var yprev:int = 0;

        public function everythingContainer() {
            // constructor code
            trace ('Container started');
            if(stage) init();
            else
            this.addEventListener(Event.ADDED_TO_STAGE, init);
        }


        function init(eventInfo:Event = null):void
        {
            if(eventInfo != null)
            {
                this.removeEventListener(Event.ADDED_TO_STAGE, init);
                trace ('Container init removed');
            }
            // constructor code


            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress);
            stage.addEventListener(KeyboardEvent.KEY_UP, onKeyRelease);
            this.addEventListener( Event.ENTER_FRAME, containerEveryFrame);
        }

        public function containerEveryFrame (Event): void {
            if (stage.contains(Main.player)) {

                xprev = this.x;
                yprev = this.y;
                checkPlayerMovement();
            }
        }
        // check the set keypress variables
        public function checkPlayerMovement () : void {
            if (wpressed) {
                this.y -= this.speed;

            }
            if (spressed) {
                this.y += this.speed;
            }
            if (apressed){
                this.x -= this.speed;
            }
            if (dpressed) {
                this.x += this.speed;
            }

        }

        //assign key presses to variables
        public function onKeyPress (event:KeyboardEvent):void {
            //up
            if (event.keyCode == 87){
                wpressed = true;

            }
            //down
            if (event.keyCode == 83) {
                spressed = true;

            }
            //left
            if (event.keyCode == 65){
                apressed = true;

            }
            //right
            if (event.keyCode == 68) {
                dpressed = true;

            }
        }

        //reset key press variables
        public function onKeyRelease (event:KeyboardEvent) : void {

            //up
            if (event.keyCode == 87){
                wpressed = false;
            }

            //down
            if (event.keyCode == 83) {
                spressed = false;
            }

            //left
            if (event.keyCode == 65){
                apressed = false;
            }

            //right
            if (event.keyCode == 68) {
                dpressed = false;
            }
        }
    }
}

Main(这里还有一些其他的东西,但是在那一刻我只是想让树与其他班级一起工作。)

    package code
{
    import flash.display.*;
    import flash.events.*;
    import flash.ui.*;
    import flash.geom.Rectangle;
    import flashx.textLayout.container.ContainerController;

    public class Main extends MovieClip
    {
        //public static var main
        public static var player:PC;
        //public static var firstenemy: WolfEnemy;
        public static var MainContainer:everythingContainer;

        public function Main()
        {
            // constructor code
            trace('main started');
            if (stage)
            {
                init();
            }
            else
            {
                this.addEventListener(Event.ADDED_TO_STAGE, init);
            }
        }

        function init(eventInfo:Event = null):void
        {
            if (eventInfo != null)
            {
                this.removeEventListener(Event.ADDED_TO_STAGE, init);
                trace('Main init removed');
            }

            MainContainer = new everythingContainer  ;
            MainContainer.x = stage.stageWidth / 2;
            MainContainer.y = stage.stageHeight / 2;
            stage.addChild(MainContainer);

            player = new PC();
            player.x = stage.stageWidth / 2;
            player.y = stage.stageHeight / 2;
            stage.addChild(player);

            //firstenemy = new WolfEnemy();
            //firstenemy.x = 100;
            //firstenemy.y = 100;
            //stage.addChild(firstenemy);

            stage.addEventListener( Event.ENTER_FRAME, everyFrameMain);
        }

        // check if an enemy hits the player.
        /*public function enemycollison(): void {
        if(firstenemy.hitTestObject(player)){
        trace ('hit enemy');
        player.health--;
        firstenemy.kill();
        }
        }*/

        // manage events that need to haapen globally for every frame
        public function everyFrameMain(Event):void
        {
            /*if (stage.contains(firstenemy)){
            enemycollison();
            } */

            //root.scrollRect = new Rectangle(player.x - 400, player.y - 300, 800, 600);

        }

        // finish and close game
        public function endgame():void
        {

        }

    }
}

最后是我的树类

    package code {

    import flash.display.*;
    import flash.events.*;
    import flash.ui.*;
    import code.Main;
    import code.everythingContainer;

    public class Tree1 extends everythingContainer {


        public function Tree1() 
        {
            // constructor code
            trace ('Tree1 started');
            if(stage) init();
            else
            this.addEventListener(Event.ADDED_TO_STAGE, init);
        }

        function init(eventInfo:Event = null):void
        {
            if(eventInfo != null)
            {
                this.removeEventListener(Event.ADDED_TO_STAGE, init);
                trace ('Tree1 init removed');
            }
            this.addEventListener( Event.ENTER_FRAME, tree1EveryFrame);
        }

        public function tree1EveryFrame (Event): void {
            playercollision();
        }

        public function playercollision(): void {
            if(this.hitTestObject(Main.player)){
                trace ('hit wall');
                Main.player.x = Main.player.xprev;
                Main.player.y = Main.player.yprev;

            }
        }
    }

}

1 个答案:

答案 0 :(得分:1)

可能是由于Fla文件中的链接错误。

  • 人民币在图书馆项目: Tree1
  • 第1帧中的ActionScript +导出导出+“类: code.Tree1
  • 文件/发布设置/动作脚本设置(小扳手,脚本下拉菜单右侧)
  • 源路径(将链接添加到编译器可以找到你的包文件夹的地方),通常对我来说,我创建一个名为 src 的fla文件旁边的文件夹,或者类似的东西,所以代码 - 文件可以在“/MyProject/src/code/Tree1.as”找到,在这种情况下,我在高级ActionScript 3.0设置内的源路径中添加“ ./ src /

在网址的Flash CS6中添加了一个示例项目: https://user.iter.org/filesharing/?uid=927205f7-cdfe-4915-a175-bc87f64af444 可用约40天。

该文件中的项目结构:

  • “/ MyProject的/ DeepInheritage.fla”
  • “/ MyProject的/ SRC /代码/ Foobar.as”
  • “/ MyProject的/ SRC /代码/ Tree1.as”
  • 扩展MovieClip的Foobar.as
  • Tree1库项目,扩展了Foobar

这应该与您在问题中描述的完全相同,这意味着该方法没有任何问题,只是找到错误的问题。很可能是由于FLA文件中的错误,但可能是其他原因。


代码文件:

package code {
    import flash.display.MovieClip;

    public class Foobar extends MovieClip {

        public function Foobar() {
            trace("foobar ctor()");
        }
    }
}

package code {
    import flash.display.MovieClip;

    public class Tree1 extends Foobar {

        public function Tree1() {
            trace("Tree1 ctor()");
        }
    }
}