Copy link to clipboard
Copied
I am coding a Marble Maze with accelerometer. Here is my code.
package {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.geom.*;
import flash.utils.getTimer;
import flash.sensors.Accelerometer;
import flash.media.Sound;
import flash.media.SoundChannel;
public class MarbleMaze_sanJ01 extends MovieClip {
// Constantes
static const speed:Number = .3;
static const marbleSize:Number = 20;
static const holeDist:Number = 5;
static const mapRect:Rectangle = new Rectangle(2, 2, 1918, 1078);
//Objet du jeu
private var blocks:Array;
//Objet accelerometer
private var accelerometer:Object;
//Variables du jeu
private var dx,dy:Number;
private var lastTime:int;
// Démarer la partie
public function startMarbleMaze_sanJ01() {
// Recuperer les blocks
findBlocks();
//définir le mouv de départ
dx = 0.0;
dy = 0.0;
// Ajouter des écouteur
this.addEventListener(Event.ENTER_FRAME,gameLoop);
//configurer l'accelerometre ou simuler avec fleche
if (Accelerometer.isSupported){
accelerometer = new Accelerometer();
accelerometer.addEventListener(AccelerometerEvent.UPDATE,
accelerometerHandler);
} else {
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownFunction);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpFunction);
stage.focus = stage;
}
} // Fin fonction start
public function findBlocks() {
blocks = new Array();
for(var i=0;i<gameSprite.numChildren;i++) {
var mc = gameSprite.getChildAt(i);
if (mc is Block) {
blocks.push(mc);
}
}
} //Fin function findblock
//jeu01
private function accelerometerHandler(e) {
dx = -e.accelerationX;
dy = e.accelerationY;
}
//si pas accelometer pour test avec fleches clavier
public function keyDownFunction(event:KeyboardEvent) {
if (event.keyCode == 37) {
dx = -.5;
} else if (event.keyCode == 39) {
dx = .5;
} else if (event.keyCode == 38) {
dy = -.5;
} else if (event.keyCode == 40) {
dy = .5;
}
} // fin fonction keydown
public function keyUpFunction(event:KeyboardEvent) {
if (event.keyCode == 37) {
dx = 0;
} else if (event.keyCode == 39) {
dx = 0;
} else if (event.keyCode == 38) {
dy = 0;
} else if (event.keyCode == 40) {
dy = 0;
}
} // fin fonction keyup
public function gameLoop(event:Event) {
// Calculer le temps écoulé
if (lastTime == 0) lastTime = getTimer();
var timeDiff:int = getTimer()-lastTime;
lastTime += timeDiff;
// Déplacer la bille
moveMarble(timeDiff);
//Vérifier si elle est dans le trou
if (Point.distance(new Point(gameSprite.marble.x,gameSprite.marble.y),
new Point(gameSprite.hole.x, gameSprite.hole.y)) < holeDist) {
endGame();
}
} // fin fonction gameloop
public function moveMarble(timeDiff:Number) {
//Calculer zone actuelle de la bille
var marbleRect = new Rectangle(gameSprite.marble.x-marbleSize/2,
gameSprite.marble.y-marbleSize/2, marbleSize, marbleSize);
// Calculer la nouvelle zone de la bille
var newMarbleRect = marbleRect.clone();
newMarbleRect.x += dx*speed*timeDiff;
newMarbleRect.y += dy*speed*timeDiff;
//Calculer le nouvel emplacement
var newX:Number = gameSprite.marble.x + dx*speed*timeDiff;
var newY:Number = gameSprite.marble.y + dy*speed*timeDiff;
// Parcourir en boucle les blocks et vérifier les collision
for(var i:int=0;i<blocks.length;i++) {
// Récupérer le rectangle bloc et voir les collisions
var blockRect:Rectangle = blocks.getRect(gameSprite);
if (blockRect.intersects(newMarbleRect)) {
// Recule horizontale
if (marbleRect.right <= blockRect.left) {
newX += blockRect.left - newMarbleRect.right;
dx = 0;
} else if (marbleRect.left >= blockRect.right) {
newX += blockRect.right - newMarbleRect.left;
dx = 0;
}
// recule verticale
if (marbleRect.top >= blockRect.bottom) {
newY += blockRect.bottom - newMarbleRect.top;
dy = 0;
} else if (marbleRect.bottom <= blockRect.top) {
newY += blockRect.top - newMarbleRect.bottom;
dy = 0;
}
} // Fin if
} // fin for
//définir nlle emplacment bille
gameSprite.marble.x = newX;
gameSprite.marble.y = newY;
} // fin fontion moveMarble
//Fin de la partie
public function endGame() {
blocks = null;
this.removeEventListener(Event.ENTER_FRAME,gameLoop);
if (Accelerometer.isSupported) {
accelerometer.removeEventListener(AccelerometerEvent.UPDATE,accelerometerHandler);
accelerometer = null;
} else {
stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
}
gotoAndStop("gameover");
}// fin fonction endgame
}// Fermer class
}// Fermer package
I get the following error:
What am I doing wrong? Can you help me. Thank you in advance.
Error # 1010: A term is undefined and has no properties.
at MarbleMaze_sanJ01 / moveMarble ()
at MarbleMaze_sanJ01 / gameLoop ()
Best regard
Anne
Copy link to clipboard
Copied
line 117 of SanJ01.as is referencing an undefined object.
Find more inspiration, events, and resources on the new Adobe Community
Explore Now