Невозможно изменить переменную на главной временной шкале, используя значение из временной шкалы символа - PullRequest
0 голосов
/ 24 апреля 2018

Я новичок в кодировании, и мне трудно найти ответ на этот вопрос.

По сути, я пытаюсь сделать одевающуюся игру во Flash CS5.5 с помощью ActionScript 3. Текущая проблема заключается в том, что я пытаюсь придать цветам постоянство в разных предметах одежды (например, если у вас есть синюю футболку, затем переоденьтесь в платье, платье должно быть синим. Если вы измените цвет на красный на платье и вернетесь назад к футболкам, тогда футболка должна быть красной.)

Я использую активы, созданные в Photoshop, и помещаю все активы в символы Movie Clip (поэтому все футболки находятся внутри футболки Symbol, все платья находятся внутри платья Symbol и т. Д.) ; и, кроме того, я помещаю все одежды одного цвета в один и тот же номер ключевого кадра соответствующего символа (все красные одежды находятся в ключевом кадре 1, все синие одежды находятся в ключевом кадре 2 и т. д.).

То, что я пытаюсь сделать, - это присвоить номер переменной на временной шкале символа всякий раз, когда игрок нажимает на цветную кнопку, затем прочитать переменную на основной временной шкале, сохранить эту переменную в другой переменной на основной временной шкале. поэтому он сохраняется даже при изменении символа, а затем заставляет другой символ прочитать переменную на главной временной шкале, чтобы применить ее к функции, которая сообщает ему, куда идти.

Моя текущая проблема заключается в том, что я не могу всю жизнь иметь переменную на главной временной шкале для чтения переменной на Символе, и поэтому она не обновляется.

Вот код:

//MAIN SCENE SCRIPT

//STOP EVERYTHING FROM STARTING
stop();

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//DECLARE COLOR VARIABLE IN MAIN TIMELINE AND ASSIGN VALUE FROM SQUARE 
SYMBOL
var color = square.KeyColor;
//MOVE COLOR VARIABLE TO PERMANENT VARIABLE
var KeepColor:int = color;

// change color variable IF THE VALUE IS NOT 1
function ChangeColor () : void
{
  if(KeepColor != 1)
    {
      if (square.KeyColor != 1)
      {
        KeepColor = square.KeyColor;
        trace("color set to square value" )
      }

      else if (pentagon.KeyColor != 1)
      {
        KeepColor = pentagon.KeyColor;
        trace("color set to pentagon value")
      }

      else
      {
        trace ("there is an error")
        //break;
      }

    }
}

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//CALL FUNCTION TO GO TO SQUARE SYMBOL AT THE CLICK OF BUTTON 1
btn1.addEventListener(MouseEvent.CLICK, printNumber);

//FUNCTION TO GO TO SQUARE SYMBOL
function printNumber(event:MouseEvent):void
{

    //GO TO FIRST KEYFRAME IN MAIN TIMELINE AND STOP
    gotoAndStop(1)
    //ASSIGN KEYCOLOR VALUE
    square.KeyColor = color;
    //PRINT COLOR CODE
    trace("color is  " + color);

}

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//CALL FUNCTION TO GO TO PENTAGON SYMBOL AT THE CLICK OF BUTTON 2
btn2.addEventListener(MouseEvent.CLICK, printNumber2);

//FUNCTION TO GO TO PENTAGON SYMBOL
function printNumber2(event:MouseEvent):void
{

    //GO TO FIRST KEYFRAME IN MAIN TIMELINE AND STOP
    gotoAndStop(2)
    //PRINT COLOR CODE INSIDE OF THE PENTAGON SYMBOL
    trace("color is " + color);

}

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//CHECK THAT THE COLOR CODE IN TH MAIN TIMELINE IS THE SAME AS THE COLOR 
FROM THE SQUARE 

//PRINT THE CODE AT THE CLICK OF THIS BUTTON
btnK.addEventListener(MouseEvent.CLICK, checkOtherKey);

//DECLARE FUNCTION TO PRINT KeepColor VARIABLE
function checkOtherKey(event:MouseEvent):void
{
trace("the current color is " + KeepColor);
}

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//SQUARE SYMBOL SCRIPT

//STOP EVERYTHING FROM STARTING
stop();

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//DECLARE KEYFRAME CODE FOR COLOR
var KeyColor:int = 1;

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//CALL FUNCTION TO GO TO COLOR 1 AT THE CLICK OF BUTTON 1
btn1.addEventListener(MouseEvent.CLICK, Keynumber);

//DECLARE FUNCTION  FOR CHANGING KEYFRAME
function Keynumber(event:MouseEvent):void
{

    //GO TO FIRST KEYFRAME IN SQUARE TIMELINE AND STOP
    gotoAndStop(1);
    //SET COLOR CODE TO 1
    KeyColor = 1;
    //PRINT COLOR CODE OF FIRST COLOR
    trace("SQUARE" + KeyColor);
    //change root color number
    MovieClip(root).color = KeyColor;

}

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//CALL FUNCTION TO GO TO COLOR 2 AT THE CLICK OF BUTTON 2
btn2.addEventListener(MouseEvent.CLICK, Keynumber2);

//DECLARE FUNCTION  FOR CHANGING KEYFRAME
function Keynumber2(event:MouseEvent):void
{
    //GO TO FIRST KEYFRAME IN SQUARE TIMELINE AND STOP
    gotoAndStop(2);
    //SET COLOR CODE TO 2
    KeyColor = 2;
    //PRINT COLOR CODE OF SECOND COLOR
    trace("SQUARE" + KeyColor);
    MovieClip(root).color = KeyColor;

}

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

 // PENTAGON SYMBOL SCRIPT


//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//STOP EVERYTHING FROM STARTING
stop()

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//DECLARE KEYFRAME CODE FOR COLOR
var KeyColor:int;

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//CALL FUNCTION TO GO TO COLOR 1 AT THE CLICK OF BUTTON 1
btn1.addEventListener(MouseEvent.CLICK, Keynumber);

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//DECLARE FUNCTION  FOR CHANGING KEYFRAME
function Keynumber(event:MouseEvent):void
{
    //GO TO FIRST KEYFRAME IN PENTAGON TIMELINE AND STOP
    gotoAndStop(1);
    //SET COLOR CODE TO 1
    KeyColor = 1;
    //PRINT COLOR CODE OF FIRST COLOR
    trace ("PENTAGON" + KeyColor);

}

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//CALL FUNCTION TO GO TO COLOR 2 AT THE CLICK OF BUTTON 2
btn2.addEventListener(MouseEvent.CLICK, Keynumber2);

//DECLARE FUNCTION  FOR CHANGING KEYFRAME
function Keynumber2(event:MouseEvent):void
{
    //GO TO SECOND KEYFRAME IN PENTAGON TIMELINE AND STOP
    gotoAndStop(2);
    //SET COLOR CODE TO 2
    KeyColor = 2;
    //PRINT COLOR CODE OF SECOND COLOR
    trace("PENTAGON" + KeyColor);

}

Спасибо за помощь!

1 Ответ

0 голосов
/ 25 апреля 2018

Вы можете сохранить номер кадра для каждого типа ткани, всегда обновлять его при изменении цвета и использовать его при смене ткани, используя свойство .currentFrame мувиклипа.

//Reference to the current shirt or dress:
var shirt:MovieClip = basicShirt; //update this when you change shirt to dress etc

//Variables for colors (frames)
var shirtColor:int = 1;

//Changing shirt color:
shirtColorButton.addEventListener(MouseEvent.CLICK, changeShirtColor);

function changeShirtColor(evt:MouseEvent):void{
    //Other handy property for you might be .totalFrames:
    if(shirt.currentFrame < shirt.totalFrames){
        shirtColor++;
    }else{
        shirtColor = 1;
    }
    shirt.gotoAndStop(shirtColor);
}

Так что теперь, если вы сменили рубашку на платье, вы можете просто снять рубашку со сцены, добавить платье на сцену и:

//function that creates the shirt:
shirt = basicDress;
shirt.gotoAndStop(shirtColor);

И если вам действительно нужны имена цветов, вы можете использовать метки кадров или просто сохранить имена цветов в массиве, поскольку порядок всегда одинаков, например:

var colorNames:Array = ["Blue","Red","Green"];
...
trace("Shirt color is "+colorNames[shirtColor - 1]);
...