我有一个类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文档中访问此变量?我试图解决这个问题,但没有任何作用..
答案 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);
删除事件监听器