![](/img/trans.png)
[英]How I can change a value of from a variable that is in the main timeline from other timeline?
[英]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.