ОШИБКА во флэш-памяти (1023: несовместимое переопределение. И 1021: повторяющееся определение функции.) - PullRequest
0 голосов
/ 29 декабря 2011

Может кто-нибудь помочь мне исправить ошибку:

(1023: несовместимое переопределение. И 1021: повторное определение функции)

Я новичок в Flash и Action Script 3 , поэтому я действительно не знаю, как это исправить.

Я создаю игру, которая выглядит следующим образом:
Если я нажму ENTER , «pamato» должен идти туда, где находится «mouse2».Это должно следовать направлению мыши2.Он также должен иметь трение и скорость.

Источником двух ошибок является функция speed.

Вот код, который я сделал до сих пор ...

var sb:Number = 0;
var friction:Number = 0.0085;
var speed:Number = .002;
var path:Shape = new Shape();
addChild(path);

pamato.addEventListener(MouseEvent.MOUSE_DOWN, t_startDrag);
pamato.addEventListener(MouseEvent.MOUSE_UP, t_stopDrag);
position.addEventListener(MouseEvent.MOUSE_UP, b_position);
mouse.addEventListener(MouseEvent.MOUSE_UP, drawPath);
speedBar.addEventListener(Event.ENTER_FRAME, speed);
pamato.addEventListener(Event.ENTER_FRAME, moving);

// dragging the pamato to its position
function t_startDrag(event:Event):void 
{
     pamato.startDrag();
}

function t_stopDrag(event:Event):void 
{
     pamato.stopDrag();

     if(pamato.hitTestObject(circle))
     {
         pamato.x = 605;
         pamato.y = 570;
     }
}

// position button
function b_position(event:Event):void 
{
     mouse.addEventListener(Event.ENTER_FRAME, cursor)
     {
            function cursor(e:Event):void
        {
            mouse.alpha = 9;
            mouse.x = mouseX;
            mouse.y = mouseY;
        }
     }
}

// path && mouse2
function drawPath(event:Event):void 
{
     mouse2.x = mouse.x;
     mouse2.y = mouse.y;
     mouse2.alpha = 10;

     path.graphics.clear();
     path.graphics.lineStyle(1,0xFFFFFF,100);
     path.graphics.moveTo(pamato.x, pamato.y); 
     path.graphics.lineTo(mouse2.x, mouse2.y);
}

// speed bar
function speed(event:Event):void
{
     speedBar.scaleX = sb;

     stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown)
     {
         function myKeyDown(e:KeyboardEvent):void
         {  
             if (e.keyCode == Keyboard.SPACE)
             {
                  sb += .0005;

                 if (sb > 1)
                 {
                     sb = 0;
                 }
              } 
         }   
      } 
}

// moving the pamato
function moving(event:Event):void
{
     stage.addEventListener(KeyboardEvent.KEY_DOWN, enterKey)
     {
             if (e.keyCode == Keyboard.ENTER)
             {
                 var myRadians:Number = Math.atan2(mouse2.y-pamato.y, mouse2.x-pamato.x);
                 var myDegrees:Number = Math.round((myRadians*180/Math.PI));
                 var yChange:Number = Math.round(mouse2.y-pamato.y);
                 var xChange:Number = Math.round(mouse2.y-pamato.y);
                 var yMove:Number = Math.round(yChange/20);
                 var xMove:Number = Math.round(xChange/20);
                 var yspeed:Number = yspeed + yMove;
                 var xspeed:Number = xspeed + xMove;

                 removeChild(holder);
                 mouse2.alpha = 0;
                 mouse.alpha = 0;
                 sb = 0;
             }

      }

     xspeed *= friction;
     yspeed *= friction;
     y += yspeed;
     x += xspeed;
}

1 Ответ

0 голосов
/ 30 декабря 2011

То, как вы добавляете слушателей событий, неверно.Либо вызовите определенную функцию, подобную этой:

function speed(event:Event):void
{
    stage.addEventListener(KeyboardEvent.KEY_DOWN, this._onKeyDown );
}

private function _onKeyDown( e:KeyboardEvent ):void
{
    // do something
}

, либо анонимную функцию, подобную этой:

function speed( event:Event ):void
{
    stage.addEventListener( KeyboardEvent.KEY_DOWN, function( e:KeyboardEvent )
        {
            // this is the function block for the anon function
            // do something
        } ); // end of add listener
}

Из этих двух, первая версия - лучший способ сделать это, так какпозволяет вам удалить прослушиватель событий, когда вы закончите с ним (не удаление прослушивателей событий означает, что объекты не могут быть собраны мусором, что означает утечку памяти)

Если у вас все еще есть проблемы, вы можете опубликовать полныйошибка (должен иметь текст ошибки и строку, в которой проблема)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...