如何在自定义类“游戏”中使用gotoAndStop()?

时间:2013-12-21 18:10:39

标签: actionscript-3 flash actionscript

我有一个类Game,其中我有一个变量pointsCount来计算点数,在构造函数中从0开始。

//my Game class

package 

{
public var pointsCount:Number;
public static const status_begin:int = 1;

public function Game {}
{
    pointsCount = 0;
}

然后我有一个函数points()来处理这些点:

public function points():void
        {
            if(ball.randomIndex == 0)
            {
            pointsCount++;
            }
            if(ball.randomIndex == 1)
            {
            pointsCount--;
            }
                        ....
               }

然后我有一个改变等级的功能:

public function changeLevel():void
        {
                if(pointsCount == 4)
                {
                    statusGame(4);

                }

                else if(pointsCount == 8) 
                {
                    statusGame(5);


                }

我有statusGame功能来“控制”游戏状态:

public function statusGame(status:int):void
        {
            switch(status)
            {
                case 1:
                this.startGame();
                break; 

                case 2: 
               ballBroken = false;
                ball = newBall(this,velX,velY);
                break;

                case 3:                 
                ballBroken = true;
                points();
                break;

                case 4: trace("Level 2") ;
                velX = 15;
                velY = -2;

                break;

                case 5:trace("Level 3") ;
                velX = 18;
                velY = -2;

                break; 

我开始在状态1(案例1)中调用的游戏的功能:

public function startGame():void
        {
            ball = new Ball(this,10,-4);
        }

我还有一个.fla文档,其中我的游戏场景和动作框架包含以下代码:

import Game;

game.gameStatus(Game.status_begin); //to start the game

**if(Game.pointsCount)
{
 trace("points 10");
 **game.removeEventListener(Event.ENTER_FRAME, _enterFrame);**
 gotoAndStop(3);

}**

我导入了我的班级Game,然后我创建了一个对象来访问我的函数gameStatus以启动游戏。

现在,当点数等于10时,我想使用gotoAndStop(3)方法转到第3帧。

但是,我的pointsCount变量始终为0,因为在我的Game构造函数中,我声明了pointsCount = 0。当它等于10时,我想访问pointsCount;我怎么能这样做?

我认为问题是因为我在函数pointsCount中处理changeLevel()。如何在.fla文档中访问此变量?我试图解决这个问题,但没有任何作用..

2 个答案:

答案 0 :(得分:0)

将pointCount作为公共变量添加到您的类游戏中,如下所示从外部访问它。

包     {

public static const status_begin:int = 1;
public var pointsCount:Number;
public function Game {}
{
    pointsCount = 0;
}

答案 1 :(得分:0)

您的代码中存在一些基本的语法错误,但我认为它们只是在问题中,并且您的实际代码编译正常。

问题似乎是你只检查pointsCount改变一次。有几种方法可以解决这个问题,要么通过每帧检查主时间轴,要么处理从游戏类本身触发的自定义事件。

第一种方法是迄今为止最简单的方法,如果不是后者那么优雅。尝试保持内部代码相同(修复可能存在的任何语法错误)

public var pointsCount:Number;
public static const status_begin:int = 1;

//Constructor
public function Game()
{
    pointsCount = 0;
}

//points incrementing and decrementing
public function points():void
{
    if(ball.randomIndex == 0)
    {
        pointsCount++;
    }
    if(ball.randomIndex == 1)
    {
        pointsCount--;
    }

    //Other code.
}

//Changing the level.
public function changeLevel():void
{
    if(pointsCount == 4)
    {
        statusGame(4);
    }

    else if(pointsCount == 8) 
    {
        statusGame(5);
    }
}

然后重写对主时间轴的检查以重复每一帧。

import Game;
import flash.events.*;

//make a new game.
var game:Game = new Game();
//Add an event listener for each frame.
this.addEventListener(Event.ENTER_FRAME, checkScore);

//Start the game.
game.statusGame(Game.status_begin);

//Check when points equal 10.
function checkScore(e:Event)
{
    if(game.pointsCount == 10)
    {
     trace("points 10");
     gotoAndStop(3);

    }
}

根据您对游戏的要求,您可能会发现在移至第3帧后必须停止检查积分值。您可以使用this.removeEventListener(Event.ENTER_FRAME, checkScore);删除事件监听器