我是一名大学生,目前在AS3上开展游戏项目
当我运行我的游戏时,我得到8个关于“1120:未定义属性的访问......”的错误。我不知道我做错了什么,所以任何人都可以帮我这个吗?
这是我的代码(是的,我知道它很长):
package {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.utils.getTimer;
public class PlatformGamess extends MovieClip {
// movement constants
static const gravity:Number=.004;
// screen constants
static const edgeDistance:Number=100;
// object arrays
private var fixedObjects:Array;
private var otherObjects:Array;
// hero and enemies
private var hero:Object;
private var enemies:Array;
// game state
private var playerObjects:Array;
private var gameScore:int;
private var gameMode:String="start";
private var playerLives:int;
private var lastTime:Number=0;
// start game
public function startPlatformGamess(){
playerObjects=new Array();
gameScore=0;
gameMode="play";
playerLives=3;
}
public function startGameLevel(){
createHero();
addEnemies();
examineLevel();
this.addEventListener(Event.ENTER_FRAME,gameLoop);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
gameMode="play";
addScore(0);
showLives();
}
// creates the hero object and sets all properties
public function createHero() {
hero=new Object();
hero.mc=gamelevel.hero;
hero.inAir=false;
hero.direction=1;
hero.animstate="stand";
hero.walkAnimation=new Array(2)
hero.animstep=0;
hero.jump=false;
hero.moveLeft=false;
hero.moveRight=false;
hero.jumpSpeed=.8;
hero.walkSpeed=.15;
hero.width=20.0;
hero.height=40.0;
hero.startx=hero.mc.x;
hero.starty=hero.mc.y;
}
public function addEnemies() {
enemies = new Array();
var i:int=1;
while (true) {
if (gamelevel["enemy"+i]==null) break;
var enemy=new Object();
enemy.mc=gamelevel["enemy"+i];
enemy.dx=0.0;
enemy.dy=0.0;
enemy.inAir=false;
enemy.direction=1;
enemy.animstate="stand"
enemy.walkAnimation = new Array(2);
enemy.animstep = 0;
enemy.jump = false;
enemy.moveRight = true;
enemy.moveLeft = false;
enemy.jumpSpeed = 1.0;
enemy.walkSpeed = .08;
enemy.width = 30.0;
enemy.height = 30.0;
enemies.push(enemy);
i++;
}
}
public function examineLevel(){
fixedObjects=new Array();
otherObject=new Array();
for (var i:int=0;i<this.gamelevel.numChildren;i++) {
var mc=this.gamelevel.getChildAt(i);
if ((mc is Floor) || (mc is Wall)) {
var floorObjects:Object=new Object();
floorObject.mc=mc;
floorObject.leftside=mc.x;
floorObject.rightside=mc.x+mc.width;
floorObject.topside.mc.y;
floorObject.bottomside=mc.y+mc.height;
fixedObjects.push(floorObject);
} else if ((mc is Treasure) || (mc is Key) ||
(mc is Door) || (mc is Chest)) {
otherObjects.push(mc);
}
}
}
public function keyDownFunction(event:KeyboardEvent) {
if (gamemode != "play") return; // don't move until in play mode
if (event.keyCode==37){
hero.moveLeft=true;
} else if (event.keyCode==39) {
hero.moveRight==true;
} else if (event.keyCode==32){
if (!hero.inAir){
hero.jump=true;
}
}
}
public function keyUpFunction(event:KeyboardEvent) {
if (event.keyCode == 37) {
hero.moveLeft = false;
} else if (event.keyCode == 39) {
hero.moveRight = false;
}
}
public function gameLoop(event:Event) {
if (lastTime==0)lastTime=getTimer();
var timeDiff:int=getTimer()-lastTime;
lastTime+=timeDiff;
if (gameMode=="play"){
moveCharacter(hero,timeDiff);
moveEnemies(timeDiff);
checkCollisions();
scrollWithHero();
}
}
// loop through all enemies and move them
public function moveEnemies(timeDiff:int) {
for(var i:int=0;i<enemies.length;i++) {
// move
moveCharacter(enemies[i],timeDiff);
// if hit a wall, turn around
if (enemies[i].hitWallRight) {
enemies[i].moveLeft=true;
enemies[i].moveRight=false;
} else if (enemies[i].hitWallLeft) {
enemies[i].moveLeft=false;
enemies[i].moveRight=true;
}
}
}
public function moveCharacter(char:Object,timeDiff:Number) {
if (timeDiff < 1) return;
var verticalChange:Number=char.dy*timeDiff+timeDiff*gravity;
if (verticalChange>15.0) verticalChange=15.0;
char.dy+=timeDiff*gravity;
var horizontalChange=0;
var newAnimState:String="stand";
var newDirection:int=char.direction;
if (char.moveLeft){
// wa
horizontalChange = -char.walkSpeed*timeDiff;
newAnimState="walk";
newDirection=-1;
} else if (char.moveRight){
// walk right
horizontalChange = char.walkSpeed*timeDiff;
newAnimState="walk";
newDirection=1;
}
if (char.jump) {
// start jump
char.jump = false;
char.dy = -char.jumpSpeed;
verticalChange = -char.jumpSpeed;
newAnimState = "jump";
}
// assume no wall hit, and hanging in air
char.hitWallRight = false;
char.hitWallLeft = false;
char.inAir = true;
// find new vertical position
var newY:Number = char.mc.y + verticalChange;
// loop through all fixed objects to see if character has landed
for(var i:int=0;i<fixedObjects.length;i++) {
if ((char.mc.x+char.width/2 > fixedObjects[i].leftside) && (char.mc.x-char.width/2 < fixedObjects[i].rightside)) {
if ((char.mc.y <= fixedObjects[i].topside) && (newY > fixedObjects[i].topside)) {
newY = fixedObjects[i].topside;
char.dy = 0;
char.inAir = false;
break;
}
}
}
// find new horizontal position
var newX:Number = char.mc.x + horizontalChange;
// loop through all objects to see if character has bumped into a wall
for(i=0;i<fixedObjects.length;i++) {
if ((newY > fixedObjects[i].topside) && (newY-char.height < fixedObjects[i].bottomside)) {
if ((char.mc.x-char.width/2 >= fixedObjects[i].rightside) && (newX-char.width/2 <= fixedObjects[i].rightside)) {
newX = fixedObjects[i].rightside+char.width/2;
char.hitWallLeft = true;
break;
}
if ((char.mc.x+char.width/2 <= fixedObjects[i].leftside) && (newX+char.width/2 >= fixedObjects[i].leftside)) {
newX = fixedObjects[i].leftside-char.width/2;
char.hitWallRight = true;
break;
}
}
}
// set position of character
char.mc.x = newX;
char.mc.y = newY;
// set animation state
if (char.inAir) {
newAnimState = "jump";
}
char.animstate = newAnimState;
// move along walk cycle
if (char.animstate == "walk") {
char.animstep += timeDiff/60;
if (char.animstep > char.walkAnimation.length) {
char.animstep = 0;
}
char.mc.gotoAndStop(char.walkAnimation[Math.floor(char.animstep)]);
// not walking, show stand or jump state
} else {
char.mc.gotoAndStop(char.animstate);
}
// changed directions
if (newDirection != char.direction) {
char.direction = newDirection;
char.mc.scaleX = char.direction;
}
}
public function scrollWithHero(){
var stagePosition:Number = gamelevel.x+hero.mc.x;
var rightEdge:Number = stage.stageWidth-edgeDistance;
var leftEdge:Number = edgeDistance;
if (stagePosition > rightEdge){
gamelevel.x -= (stagePosition-rightEdge);
if (gamelevel.x < -(gamelevel.width-stage.stageWidth)) gamelevel.x = -(gamelevel.width-stage.stageWidth);
}
if (stagePosition < leftEdge){
gamelevel.x += (leftEdge-stagePosition);
if (gamelevel.x > 0)gamelevel.x=0;
}
}
public function checkCollisions(){
// enemies
for(var i:int=enemies.length-1;i>=0;i--){
if (hero.mc.hitTestObject(enemies[i].mc)){
if (hero.inAir && (hero.dy>0)){
enemyDie(i);
} else {
heroDie();
}
}
}
for(i=otherObjects.length-1;i>=0;i--) {
if (hero.mc.hitTestObject(otherObjects[i])) {
getObject(i);
}
}
}
public function enemyDie(enemyNum:int) {
var pb:PointBurst = new PointBurst(gamelevel,"Zetsu Extinct!",enemies[enemyNum].mc.x,enemies[enemyNum].mc.y-20);
gamelevel.removeChild(enemies[enemyNum].mc);
enemies.splice(enemyNum,1);
}
public function heroDie() {
// show dialog box
var dialog:Dialog = new Dialog();
dialog.x = 175;
dialog.y = 100;
addChild(dialog);
if (playerLives == 0) {
gameMode = "gameover";
dialog.message.text = "Game Over!";
} else {
gameMode = "dead";
dialog.message.text = "Yoi Failed...";
playerLives--;
}
hero.mc.gotoAndPlay("die");
}
public function getObject(objectNum:int) {
if (otherObjects[objectNum] is Treasure) {
var pb:PointBurst = new PointBurst(gamelevel,100,otherObjects[objectNum].x,otherObjects[objectNum].y);
gamelevel.removeChild(otherObjects[objectNum]);
otherObjects.splice(objectNum,1);
addScore(100);
} else if (otherObjects[objectNum] is Key) {
pb = new PointBurst(gamelevel,"Got Key!" ,otherObjects[objectNum].x,otherObjects[objectNum].y);
playerObjects.push("Key");
gamelevel.removeChild(otherObjects[objectNum]);
otherObjects.splice(objectNum,1);
} else if (otherObjects[objectNum] is Door) {
if (playerObjects.indexOf("Key") == -1) return;
if (otherObjects[objectNum].currentFrame == 1) {
otherObjects[objectNum].gotoAndPlay("open");
levelComplete();
}
} else if (otherObjects[objectNum] is Chest) {
otherObjects[objectNum].gotoAndStop("open");
gameComplete();
}
}
public function addScore(numPoints:int) {
gameScore += numPoints;
scoreDisplay.text = String(gameScore);
}
// update player lives
public function showLives() {
livesDisplay.text = String(playerLives);
}
// level over, bring up dialog
public function levelComplete() {
gameMode = "done";
var dialog:Dialog = new Dialog();
dialog.x = 175;
dialog.y = 100;
addChild(dialog);
dialog.message.text = "Level Complete!";
}
public function gameComplete() {
gameMode = "gameover";
var dialog:Dialog = new Dialog();
dialog.x = 175;
dialog.y = 100;
addChild(dialog);
dialog.message.text = "You Got the Treasure!";
}
public function clickDialogButton(event:MouseEvent) {
removeChild(MovieClip(event.currentTarget.parent));
// new life, restart, or go to next level
if (gameMode == "dead") {
// reset hero
showLives();
hero.mc.x = hero.startx;
hero.mc.y = hero.starty;
gameMode = "play";
} else if (gameMode == "gameover") {
cleanUp();
gotoAndStop("start");
} else if (gameMode == "done") {
cleanUp();
nextFrame();
}
// give stage back the keyboard focus
stage.focus = stage;
}
// clean up game
public function cleanUp() {
removeChild(gamelevel);
this.removeEventListener(Event.ENTER_FRAME,gameLoop);
stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
}
}
}
以下是编码中的错误列表:
*第103行,第4列1120:访问未定义的属性otherObject。
*第109行,第6列1120:访问未定义的属性floorObject。
*第110行,第6列1120:访问未定义的属性floorObject。
*第111行,第6列1120:访问未定义的属性floorObject。
*第112行,第6列1120:访问未定义的属性floorObject。
*第113行,第6列1120:访问未定义的属性floorObject。
*第114行,第24栏1120:访问未定义的属性floorObject。
*第124行,第8列1120:访问未定义的属性游戏模式。
可以请有人帮助我,我一直在摸不着它
感谢
答案 0 :(得分:0)
您的代码中存在拼写错误。
ActionScript 区分大小写,并且变量需要拼写正确!
第103行:将otherObject=new Array();
更改为otherObjects=new Array();
第108行:将var floorObjects:Object=new Object();
更改为var floorObject:Object=new Object();
第124行:将if (gamemode != "play")
更改为if (gameMode != "play")