【问题标题】:AS3, error 1180 call to a possibly undefined method Nivel1, Adobe animateAS3,错误 1180 调用可能未定义的方法 Nivel1,Adobe 动画
【发布时间】:2016-10-01 22:56:55
【问题描述】:

谢谢你的回答,我已经解决了这个问题,但我有这个,这是我喜欢制作的游戏的所有类,但玩家没有移动,你可以在这里帮助我,这就是问题所在。谢谢

Nivel1 类:

package Codigos.Niveles {
    import flash.display.MovieClip;
    import Codigos.Jugador;
    import flash.events.Event;
    import Codigos.CamaraVirtual;

    public class Nivel1 extends MovieClip {

       public function Nivel1() {
          main.nuevoJugador = new Jugador();
          addChild(main.nuevoJugador);
          main.nuevoJugador.x = 34;
          main.nuevoJugador.y = 334;
          main.nuevaCamara = new CamaraVirtual();
          addChild(main.nuevaCamara);
          main.nuevaCamara.x = 400;
          main.nuevaCamara.y = 240;
          addEventListener("EnterFrame",nivel1Eventos);
       }
       private function nivel1Eventos(e:Event){
           if(main.nuevoJugador.x<=150){
               MovieClip(root).Nivel.x+=5;
               MovieClip(root).escenario.x+=5;
               main.nuevoJugador.x+=5;
           }
           else if(main.nuevoJugador.x>=650){
               MovieClip(root).Nivel.x-=5;
               MovieClip(root).escenario.x-=5;
               main.nuevoJugador.x-=5;
           }
        }  

     }

}

主类:

package  {

    import flash.display.MovieClip;
    import Codigos.Jugador;
    import flash.display.StageScaleMode;
    import Codigos.CamaraVirtual;

    public class main extends MovieClip {

        public static var nuevoJugador:Jugador;
        public static var nuevaCamara:CamaraVirtual;
        public static var TemporalPuntos:int = 0;
        public static var DerechaVar:Boolean = false;
        public static var IzquierdaVar:Boolean = false;
        public static var SaltoVar:Boolean = false;

        public function main() {
            stage.scaleMode = StageScaleMode.EXACT_FIT;
        }
    }

}

Jugador类(玩家):

package Codigos {

    import flash.display.MovieClip;
    import flash.events.Event;


    public class Jugador extends MovieClip {

        public var VelocidadX:int = 5;
        public var VelocidadY:int = 1;
        public var Limite:int = 10;
        public var Salto:int = -12;
        public function Jugador() {
            addEventListener("EnterFrame",Moverme);
        }
        private function Moverme(e:Event){
            var NivelaTocar = MovieClip(root).Nivel;
            if(NivelaTocar.hitTestPoint(x,y + height/2,true)){
                while(NivelaTocar.hitTestPoint(x,-1 + y +height/2,true)){
                    y--;
                }
                VelocidadY=0;
                if(main.SaltoVar){
                    VelocidadY=Salto;
                    y+=VelocidadY;
                }
            }
            else if(NivelaTocar.hitTestPoint(x,y-height/2,true)){
                VelocidadY = VelocidadY * -0.5;
                y += VelocidadY;
                while(NivelaTocar.hitTestPoint(x, y - height / 2,true)){
                    y++;
                    main.SaltoVar = false;
                }
            }

            else {
                y+=VelocidadY * 1.5;
                main.SaltoVar = false;
                if(VelocidadY <= Limite){
                    VelocidadY++;
                }
            }

            while(NivelaTocar.hitTestPoint(x + width / 2, y , true)){
                x--;
            }
            while(NivelaTocar.hitTestPoint(x - width / 2, y , true)){
                x++;
            }
            movimientosReales();
        }
        private function movimientosReales(){
            if(main.DerechaVar){
                x+=VelocidadX;
                scaleX = 1;
            }
            else if(main.IzquierdaVar){
                x-=VelocidadX;
                scaleX = -1;
            }
        }
    }

}

CamaraVirtual 类(虚拟相机):

package Codigos {

import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.events.Event;


    public class CamaraVirtual extends MovieClip {


        public function CamaraVirtual() {
            addEventListener(MouseEvent.MOUSE_DOWN, Botones);
            addEventListener(MouseEvent.MOUSE_UP, Soltar);
            addEventListener(Event.ENTER_FRAME, TodaCam);
            Puntos.text = String(int(0));
        }
        private function Botones(e:MouseEvent){
            if(e.target == Derecha){
                main.DerechaVar = true;
            }
            else if(e.target == Izquierda){
                main.IzquierdaVar = true;
            }
            else if(e.target == Salto){
                main.SaltoVar = true;
            }
        }
        private function Soltar(e:MouseEvent){
            main.DerechaVar = false;
            main.IzquierdaVar = false;
            main.SaltoVar = false;
        }
        private function TodaCam(e:Event){
            Puntos.text = String(int(main.TemporalPuntos));
        }
    }

}

Moneda 类(硬币):

package Codigos {

    import flash.display.MovieClip;
    import flash.events.Event;


    public class Moneda extends MovieClip {


        public function Moneda() {
            addEventListener(Event.ENTER_FRAME, tocar);
        }
        private function tocar(e:Event){
            if(hitTestObject(main.nuevoJugador)){
                removeEventListener(Event.ENTER_FRAME, tocar);
                main.TemporalPuntos++;
                parent.removeChild(this);
            }
        }
    }

}

【问题讨论】:

  • 试试var nuevoNivel1 : Nivel1 = new Nivel1();。下次发布实际代码文本,而不是代码图片。解释你的错误实际上说了什么。
  • 变量和方法请使用英文名!
  • 包名应该以小写“codigos.niveles”开头,变量名也应该。类应始终以大写开头:“Nivel1”。方法应始终以小写字母开头。您应该在发布问题之前考虑这一点。
  • 如果这个问题不清楚或格式不正确,任何人都很难回答您的问题。 @布兰登

标签: actionscript-3 flash undefined


【解决方案1】:

在您的构造方法中Nivel1() 注释所有代码,然后试试这个

public function Nivel1(){
        trace(main.nuevoJugador);
        /*
        main.nuevoJugador = new Jugador();
        addChild(main.nuevoJugador);
        main.nuevoJugador.x = 25;
        main.nuevoJugador.y = 344;
        */
}

输出是什么? 我想是的

trace(main.nuevoJugador);

或者只是:

trace(main);

会输出 undefined / null / 还是会抛出错误?对吗?

因为在“Nivel1”类中没有定义“main”... 我错了吗?

请您也发布“Jugador”课程

不是图片,而是代码!!!

只需复制并粘贴代码,然后选择您添加的代码,然后点击“代码示例

 Ctrl+K”
,如下图所示:

因此,用户可以在另一个答案中编辑/更改您的代码,而无需花费时间重写 prinstscreen 提供的所有代码(这对于 stackoverflow 上的社区来说是一种巨大的时间浪费)!

【讨论】:

  • @Brandon 反馈?
  • 抱歉没有回复我的电脑有问题。我已经解决了这个问题,但如果你能帮我做点别的。我已经完成了在关卡中出现并移动玩家的代码,但没有移动。
  • 对不起,我是新手,我编辑并放置了所有的类,我不知道为什么玩家不动。 @战术
  • 您是否尝试跟踪“main”? :跟踪(主要);我在您的课程中没有看到任何对 main 的引用。@Brandon..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多