PDA

View Full Version : Ball game - Error #1010.



bluebell
February 3rd, 2010, 01:17 PM
Hi!
I just started a course in Flash so I'm somewhat a newbie. I'm sorry the answer is obvious and I'm a bother :<
In the game you are rewarded a point if you catch the green ball (pointer) and it's game over if you touch a red one (enemy). If you reach 5 points you advance to the next level and another enemy will spawn. And that's when this error occurs:

TypeError: Error #1010: A term is undefined and has no properties.
at Bollspel_fla::MainTimeline/enemiesMove()[Bollspel_fla.MainTimeline::frame2:58]
at Bollspel_fla::MainTimeline/eachFrame()[Bollspel_fla.MainTimeline::frame2:16]


stop()
var points:int = 0
var level:int = 0
var fiender:int = 1
var riktningX:Array = new Array (1)
var riktningY:Array = new Array (1)

stage.addEventListener(Event.ENTER_FRAME,eachFrame )

function eachFrame(e:Event){
minBoll.x = mouseX
minBoll.y = mouseY

// Move each enemy
for(var i:int = 0; i <= level; i++){
enemiesMove(i)
}

// Catch a point
if(minBoll.hitTestObject(pointer)){
points = points + 1
pointer.x = Math.random() * (550 - pointer.width / 2)
pointer.y = Math.random() * (400 - pointer.width / 2)
if(points % 5 == 0){
level = level + 1
}
}
pointCount.text = "Poäng: "+points
levelCount.text = "Nivå: "+level
}

// Add an enemy
function addEnemy(e:MouseEvent){
var enemy:Fiende = new Fiende()
this.addChild(enemy)
enemy.x = 25;
enemy.y = 45;
enemy.name = "fiende"+(level)
riktningX.push(1)
riktningY.push(1)
}


// Move an enemy
function enemiesMove(whatEnemy){
var xpos:int = riktningX[whatEnemy]
var ypos:int = riktningY[whatEnemy]
var enemy:String = "fiende"+whatEnemy

// Move an enemy left or right until it hits the edge
if(xpos == 1){
this[enemy].x+=10
if(this[enemy].x > 550 - this[enemy].width / 2){
riktningX[whatEnemy] = 0
}
}
else if(xpos == 0){
this[enemy].x-=10
if(this[enemy].x < 0 + this[enemy].width / 2){
riktningX[whatEnemy] = 1
}
}

// Move an enemy up or down until it hits the edge
if(ypos == 1){
this[enemy].y+=10
if(this[enemy].y > 400 - this[enemy].width / 2){
riktningY[whatEnemy] = 0
}
}
else if(ypos == 0){
this[enemy].y-=10
if(this[enemy].y < 0 + this[enemy].width / 2){
riktningY[whatEnemy] = 1
}
}
}

// Game is over
function gameOver(){
stage.removeEventListener(Event.ENTER_FRAME,eachFr ame)
gotoAndStop(3)
}

m2244
February 3rd, 2010, 01:32 PM
Is this the problem? Mouse event?

function addEnemy(e:MouseEvent)


Hi!
I just started a course in Flash so I'm somewhat a newbie. I'm sorry the answer is obvious and I'm a bother :<
In the game you are rewarded a point if you catch the green ball (pointer) and it's game over if you touch a red one (enemy). If you reach 5 points you advance to the next level and another enemy will spawn. And that's when this error occurs:

TypeError: Error #1010: A term is undefined and has no properties.
at Bollspel_fla::MainTimeline/enemiesMove()[Bollspel_fla.MainTimeline::frame2:58]
at Bollspel_fla::MainTimeline/eachFrame()[Bollspel_fla.MainTimeline::frame2:16]


stop()
var points:int = 0
var level:int = 0
var fiender:int = 1
var riktningX:Array = new Array (1)
var riktningY:Array = new Array (1)

stage.addEventListener(Event.ENTER_FRAME,eachFrame )

function eachFrame(e:Event){
minBoll.x = mouseX
minBoll.y = mouseY

// Move each enemy
for(var i:int = 0; i <= level; i++){
enemiesMove(i)
}

// Catch a point
if(minBoll.hitTestObject(pointer)){
points = points + 1
pointer.x = Math.random() * (550 - pointer.width / 2)
pointer.y = Math.random() * (400 - pointer.width / 2)
if(points % 5 == 0){
level = level + 1
}
}
pointCount.text = "Poäng: "+points
levelCount.text = "Nivå: "+level
}

// Add an enemy
function addEnemy(e:MouseEvent){
var enemy:Fiende = new Fiende()
this.addChild(enemy)
enemy.x = 25;
enemy.y = 45;
enemy.name = "fiende"+(level)
riktningX.push(1)
riktningY.push(1)
}


// Move an enemy
function enemiesMove(whatEnemy){
var xpos:int = riktningX[whatEnemy]
var ypos:int = riktningY[whatEnemy]
var enemy:String = "fiende"+whatEnemy

// Move an enemy left or right until it hits the edge
if(xpos == 1){
this[enemy].x+=10
if(this[enemy].x > 550 - this[enemy].width / 2){
riktningX[whatEnemy] = 0
}
}
else if(xpos == 0){
this[enemy].x-=10
if(this[enemy].x < 0 + this[enemy].width / 2){
riktningX[whatEnemy] = 1
}
}

// Move an enemy up or down until it hits the edge
if(ypos == 1){
this[enemy].y+=10
if(this[enemy].y > 400 - this[enemy].width / 2){
riktningY[whatEnemy] = 0
}
}
else if(ypos == 0){
this[enemy].y-=10
if(this[enemy].y < 0 + this[enemy].width / 2){
riktningY[whatEnemy] = 1
}
}
}

// Game is over
function gameOver(){
stage.removeEventListener(Event.ENTER_FRAME,eachFr ame)
gotoAndStop(3)
}

bluebell
February 3rd, 2010, 04:00 PM
Is this the problem? Mouse event?

function addEnemy(e:MouseEvent)
Unfortunaly not =/ Thanks for the reply though!

Edit: It seems I also forgot to addEnemy after I've raised the level. The error still persists though

Snällfot
February 3rd, 2010, 05:51 PM
One problem that I can see is that you name all your instances of Fiende to "enemy" (the .name property is not the same as the instance name).

You then try to reference it like:


var enemy:String = "fiende"+whatEnemy
this[enemy].x+=10

And since there are no objects with instance name "fiende0", "fiende1" etc., you will get the 1010 error.

My suggestion is that you keep references to your instances of Fiende in an array, like:


var enemy:Fiende = new Fiende()
this.addChild(enemy)
arrWithAllEnemies.push(enemy)


You can then reference it like:


var aFiende:Fiende = arrWithAllEnemies[whatEnemy] as Fiende;
aFiende.x+=10
etc...

bluebell
February 3rd, 2010, 08:59 PM
Worked like a charm, thanks a lot :)