繁体   English   中英

Flash As3变量问题

[英]Flash As3 Variable Issue

我在第1帧上有一个变量,从3000开始,并且一直在减少。 此变量确定对象生成之间的时间间隔。 因此,基本上,随着此数量的减少,物体的生成速度越来越快。 一切正常,除了当我使角色死亡并且主时间轴转到第2帧以显示死亡屏幕的事实。 在该帧上单击“再次播放”后,您将返回到第1帧。对象以死亡前产生的任何速度继续产生。 即使单击“再次播放”时变量重置为3000。

我跟踪了变量,并确实将其重置。 但由于某些原因,这些生成对象遵循先前的变量。

这是第一个框架上的代码:

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


}

您必须放入removeEventListener(Event.ENTER_FRAME, update); onTouchEndRed函数中。 而且也可能在此'if'条件内: if(player.hitTestObject(leftHitBox)){...

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

此外,每次您跳到另一个框架时,FlashPlayer都会执行框架的代码。 这就是为什么您的变量被重新初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM