簡體   English   中英

無法使用符號時間軸中的值更改主時間軸上的變量

[英]Unable to change variable on Main Timeline using value from Symbol Timeline

我是編碼新手,因此很難找到答案。

基本上,我正在嘗試使用ActionScript 3在Flash CS5.5中制作換裝游戲。當前問題是,我正在嘗試通過不同的衣服使顏色保持不變(例如:如果您有藍色的T-襯衫,然后換上衣服,衣服應該是藍色的。如果您將衣服上的顏色更改為紅色,然后又換回T恤,那么T恤現在應該是紅色的。)

我正在使用我在Photoshop中創建的資產,並將所有資產都放在Movie Clip符號中(因此,所有T恤都在Symbol T恤中,所有連衣裙都在Symbol Dress中,依此類推); 而且最重要的是,我將所有相同顏色的衣服放在它們各自符號的相同關鍵幀編號中(所有紅色衣服在關鍵幀1中,所有藍色衣服在關鍵幀2中,依此類推)。

我想做的是每當玩家單擊顏色按鈕時,在Symbol時間軸中為變量分配一個數字,然后在Main Timeline中讀取該變量,將該變量存儲在Main Timeline中的另一個變量中,以便其持久存在即使符號發生變化,然后讓另一個符號讀取主時間軸上的變量,以應用於告訴其去向的函數。

我當前的問題是我無法終生讓主時間軸上的變量讀取Symbol上的變量,因此無法更新。

這是代碼:

//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);

}

謝謝您的幫助!

通過使用影片剪輯的.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]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM