Hello, i am having troubles with using shared objects to save and load data for my highscore feature of my game i am developing in actionscript 3. This is my main code.
I am trying to update a dynamic text field that acts as an high score function
[as]
package
{
// initialize;
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.ui.Mouse;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.Event;
import flash.media.SoundChannel;
import flash.net.SharedObject;
import flash.text.TextField;
import flash.display.Stage;
import flash.events.ProgressEvent;
public class Game extends MovieClip
{
public static var _stage:Stage;
static var so:SharedObject;
static var ship:MovieClip;
static var healthMeter:HealthMeter;
static var score:Score;
static var highScore:HighScore;
static var enemyShipTimer:Timer;
static var gameOverMenu:GameOverMenu;
static var startMenu:StartMenu;
static var helpMenu:HelpMenu;
static var startButton:StartButton;
static var returnButton:ReturnButton;
static var helpButton:HelpButton;
static var pauseButton:PauseButton;
static var playButton:PlayButton;
static var mainMenuButton:MainMenuButton;
public var currentValue:Number;
public var loadingProgress:LoadingProgress;
public function Game()
{
loadingProgress = new LoadingProgress();
loadingProgress.x = 550;
loadingProgress.y = 500;
addChild( loadingProgress );
loaderInfo.addEventListener( Event.COMPLETE, onCompletelyDownloaded );
loaderInfo.addEventListener( ProgressEvent.PROGRESS, onProgressMade );
}
public function showMenuScreen():void
{
_stage = this.stage;
Key.initialize(stage);
ship = new Ship();
healthMeter = new HealthMeter();
var score:Score = new Score();
var highScore:HighScore = new HighScore();
so = SharedObject.getLocal("scores");
if (so.data.score)
{
highScore.bestScore.text = so.data.score.toString();
}
else
{
highScore.bestScore.text = "0";
}
addChild(score);
addChild(highScore);
gameScore.visible = false;
bestScore.visible = true;
healthMeter.x = 2.5;
healthMeter.y = 576;
gameOverMenu = new GameOverMenu();
gameOverMenu.x = 217;
gameOverMenu.y = 244;
addChild(gameOverMenu);
gameOverMenu.visible = false;
helpMenu = new HelpMenu();
helpMenu.x = 480;
helpMenu.y = 312;
addChild(helpMenu);
helpMenu.visible = false;
returnButton = new ReturnButton();
returnButton.x = 54;
returnButton.y = 52;
addChild(returnButton);
returnButton.visible = false;
gameOverMenu.playAgainButton.addEventListener("mouseDo wn", newGame);
startMenu = new StartMenu();
mainMenuButton = new MainMenuButton();
startButton = new StartButton();
helpButton = new HelpButton();
startMenu.x = 151;
startMenu.y = 111;
startButton.x = 93;
startButton.y = 426;
helpButton.x = 631;
helpButton.y = 386;
mainMenuButton.x = 656;
mainMenuButton.y = 483;
addChild(mainMenuButton);
mainMenuButton.visible = false;
stage.addChildAt(startMenu, 0);
addChild(startButton);
addChild(helpButton);
startMenu.visible = true;
startButton.visible = true;
helpButton.visible = true;
startMenu.visible = true;
startButton.addEventListener("mouseDown", newGame);
helpButton.addEventListener("mouseDown", helpGame);
mainMenuButton.addEventListener("mouseDown", mainMenu);
returnButton.addEventListener("mouseDown", mainMenu2);
pauseButton = new PauseButton();
pauseButton.x = 896;
pauseButton.y = 63;
pauseButton.addEventListener("mouseDown", PauseGame);
playButton = new PlayButton();
playButton.x = 896;
playButton.y = 63;
addChild(playButton);
playButton.visible = false;
playButton.addEventListener("mouseDown", PlayGame);
}
static function gameOver()
{
scoreF();
mainMenuButton.visible = true;
healthMeter.visible = false;
pauseButton.visible = false;
gameOverMenu.visible = true;
enemyShipTimer.stop();
for (var i in EnemyShip.list)
{
EnemyShip.list[i].kill();
}
ship.takeDamage(-ship.maxHealth);
}
function newGame(e:Event)
{
addEventListener(Event.DEACTIVATE, PauseGame);
bestScore.visible = false;
gameScore.visible = true;
addChild(pauseButton);
addChild(healthMeter);
addChild(mainMenuButton);
enemyShipTimer = new Timer(750);
enemyShipTimer.addEventListener("timer", sendEnemy);
addChild(ship);
healthMeter.visible = true;
startMenu.visible = false;
mainMenuButton.visible = false;
startButton.visible = false;
healthMeter.visible = true;
pauseButton.visible = true;
playButton.visible = false;
gameOverMenu.visible = false;
helpButton.visible = false;
ship.visible = true;
ship.x = 367;
ship.y = 542;
enemyShipTimer.start();
currentValue = 0;
updateDisplay();
}
function mainMenu(e:Event)
{
removeEventListener(Event.DEACTIVATE, PauseGame);
bestScore.visible = true;
gameScore.visible = false;
removeChild(mainMenuButton);
removeChild(ship);
healthMeter.visible = false;
startMenu.visible = true;
mainMenuButton.visible = false;
startButton.visible = true;
healthMeter.visible = false;
pauseButton.visible = false;
playButton.visible = false;
ship.takeDamage(ship.maxHealth);
gameOverMenu.visible = false;
helpButton.visible = true;
returnButton.visible = false;
}
function mainMenu2(e:Event)
{
bestScore.visible = true;
gameScore.visible = false;
healthMeter.visible = false;
startMenu.visible = true;
mainMenuButton.visible = false;
startButton.visible = true;
healthMeter.visible = false;
pauseButton.visible = false;
playButton.visible = false;
gameOverMenu.visible = false;
helpButton.visible = true;
returnButton.visible = false;
helpMenu.visible = false;
}
function PauseGame(e:Event)
{
enemyShipTimer.removeEventListener("timer", sendEnemy);
stage.frameRate = 0;//
pauseButton.visible = false;
playButton.visible = true;
}
function PlayGame(e:Event)
{
enemyShipTimer.addEventListener("timer", sendEnemy);
stage.frameRate = 30;//
pauseButton.visible = true;
playButton.visible = false;
}
function helpGame(e:Event)
{
startMenu.visible = false;
startButton.visible = false;
helpButton.visible = false;
helpMenu.visible = true;
returnButton.visible = true;
}
function sendEnemy(e:Event)
{
var enemy = new EnemyShip();
stage.addChildAt(enemy, 0);
addToValue(1);
}
function addToValue( amountToAdd:Number ):void
{
currentValue = currentValue + amountToAdd;
updateDisplay();
}
static function scoreF():void
{
if (so.data.score)
{
if (getFinalScore()>so.data.score)
{
so.data.score = getFinalScore();
so.flush();
}
}
else
{
so.data.score = getFinalScore();
so.flush();
}
}
function updateDisplay():void
{
if (currentValue>Number(highScore.bestScore.text))
{
scoreF();
highScore.bestScore.text = currentValue.toString();
}
TextField(gameScore.getChildByName("scoreDisplay")).te xt = currentValue.toString();
TextField(bestScore.getChildByName("bestScore")).text = highScore.bestScore.text;
loadingProgress.percentDisplay.text = currentValue.toString();
}
static function getFinalScore()
{
_stage;
return;
gameScore.currentValue;
}
public function onCompletelyDownloaded( event:Event ):void
{
gotoAndStop(3);
showMenuScreen();
}
public function onProgressMade( progressEvent:ProgressEvent ):void
{
setValue( Math.floor( 100 * loaderInfo.bytesLoaded / loaderInfo.bytesTotal ) );
}
public function setValue( amount:Number ):void
{
currentValue = amount;
updateDisplay();
}
}
}
[/as]
when i run this, it crashes with this error.
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Game/updateDisplay()[C:\Users\Ben\Desktop\SFUR\Game.as:329]
at Game/setValue()[C:\Users\Ben\Desktop\SFUR\Game.as:356]
at Game/onProgressMade()[C:\Users\Ben\Desktop\SFUR\Game.as:351]
help would be greatly appreciated.
if you need any more details please ask.
Line 329: if (currentValue>Number(highScore.bestScore.text))
Line 356: updateDisplay();
Line 351:
setValue( Math.floor( 100 * loaderInfo.bytesLoaded / loaderInfo.bytesTotal ) ); |
-Ben