2014-03-19 166 views
0

我在帧1上有一个变量,它始于3000并且一直在下降。这个变量决定了一个对象产生的时间间隔。所以基本上随着这个数字的减少,物体产生得更快更快。除了当我让人物死亡和主时间轴转到第2帧以显示死亡屏幕时,一切都可以正常工作。当在该框架上点击“再次玩耍”时,可以让你回到第1帧。这些物体以它们在死前产卵的速度继续产卵。即使当点击“再次播放”时变量重置为3000.Flash As3可变文件号

我追踪了变量,并且它确实重置了。但由于某些原因,这些产卵物体会遵循先前的变量。

下面有在所述第一帧的代码:

import flash.events.Event; 

stop(); 

var num1:Number = 0; 
var scrollSpeed:Number = 3000; 
var playerState:Number = 1; 
var alive:Boolean = true; 
var Redbars:Array = new Array(); 
var Bluebars:Array = new Array(); 

var scoreCount:Number = 10; 

addEventListener(Event.ENTER_FRAME, update); 



function update(e:Event){ 

trace(scrollSpeed); 

scoreCount += 1; 
scoreText.text = (scoreCount).toString(); 

//SCROLL SPEED------------------- 

if(scrollSpeed > 300) 
{ 
scrollSpeed -= 1; 
} 
//-------------------------------- 

CheckForCollisionBlue(); 
CheckForCollisionRed(); 

//trace(alive); 

if(player.currentFrame == 1){ 
    playerState = 1; 
} 


//Check if lost 
if(player.hitTestObject(leftHitBox)){ 
    gotoAndStop(2); 
    scoreEnd.text = (scoreCount).toString(); 
} 


//If dead Delete Object 
if(currentFrame == 2){ 
     deleteBlue(); 
     deleteRed(); 

} 




} 



//// 
//Timer//////////////////////////////// 


var myTimer:Timer = new Timer(scrollSpeed,10000000); 
myTimer.addEventListener(TimerEvent.TIMER, timerListener); 
function timerListener (e:TimerEvent):void{ 


//Generate Random number 
num1 = randomRange(); 
trace(num1); 


//IF NUM1 = 1------------------------------------------ 
if(num1 == 1){ 

//Create a Red Bar 
var redBar = new Jump_Cube(); 
Redbars.push(redBar); //add enemy to the array 
redBar.x = -33; 
redBar.y = 99; 
redBar.width = 12.5; 
redBar.height = 20.45; 

//Update the Bar 
for(var i:int=0; i < Redbars.length; i++){ 
    if(currentFrame == 1) 
{ 
    addChild(Redbars[i]); 
} 
}  
} 


//IF NUM1 = 2------------------------------------------ 
if(num1 == 2){ 

//Create a Blue Bar 
var blueBar = new Jump_Cube2(); 
Bluebars.push(blueBar); //add enemy to the array 
blueBar.x = -26.8; 
blueBar.y = 10; 
blueBar.width = 12.25; 
blueBar.height = 31.90; 

//Update the Bar 
for(var j:int=0; j < Bluebars.length; j++){ 
     if(currentFrame == 1) 
     { 
    addChild(Bluebars[j]); 
     } 
     } 

myTimer.delay = scrollSpeed; 

} 



} 
myTimer.start(); 



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

//Check for Collision------------------------------ 
function CheckForCollisionBlue(){ 
for(var i:int=0; i < Bluebars.length; i++){ 
     if(player.hitTestObject(Bluebars[i])){ 
      //Collision 
      trace("Didnt Hit Blue"); 
      player.x -= 5; 
      player.y += 1; 
     } 
} 
} 

//Check for Collision------------------------------ 
function CheckForCollisionRed(){ 
for(var i:int=0; i < Redbars.length; i++){ 
     if(player.hitTestObject(Redbars[i])){ 
      //Collision 
      trace("Didnt Hit Red"); 
      player.x -= 5; 
      player.y += 1; 
     } 
} 
} 












function randomRange():Number 
{ 
return (Math.floor(Math.random() * (2 - 1 + 1)) + 1); 
} 

///////////BUTTONS------------------ 
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 



redButton.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchEndRed); 
function onTouchEndRed(e:TouchEvent):void{ 
player.gotoAndPlay(2); 
playerState = 2; 
} 

blueButton.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchEndBlue); 
function onTouchEndBlue(e:TouchEvent):void{ 
player.gotoAndPlay(19); 
playerState = 3; 
} 




///////--CLEARING STAGE 
//-------------------------------------------------------------------- 

//delete Blue------------------------------ 
function deleteBlue(){ 
for(var i:int=0; i < Bluebars.length; i++){ 
     removeChild(Bluebars[i]); 
     } 

} 

//delete Red------------------------------ 
function deleteRed(){ 
for(var i:int=0; i < Redbars.length; i++){ 
     removeChild(Redbars[i]); 
     } 

} 

下面有第二框架上的代码:

stop(); 

alive = false; 

againButton.addEventListener(TouchEvent.TOUCH_END, again); 
function again(e:TouchEvent):void{ 
gotoAndStop(1); 
playerState = 1; 

scrollSpeed = 3000; 

deleteBlue(); 
deleteRed(); 


} 

回答

-2

只需停止使用帧编程。改用类。 AS3基于类。它会带给你很多好处。此链接可以帮助您开始:http://www.adobe.com/devnet/actionscript/getting_started.html

此外,FlashPlayer每次跳到另一帧时都会执行帧的代码。这就是为什么你的变量正在重新初始化。

+1

我倾向于同意Codeluck,但他仍然有不好的答案。它没有开始处理原始问题的实质,而是将主题改变为另一种编程方式!这可能是一种更好的方式,但这与问题无关。 – Craig

0

你必须在removeEventListener(Event.ENTER_FRAME, update);里面加入你的onTouchEndRed函数。也可能在这个'如果'条件的内部:if(player.hitTestObject(leftHitBox)){...