PDA

View Full Version : Help with custom Class


SergeantFlash
07-14-2008, 08:39 PM
Below is the code I have in my .as file (called "BallGameClass.as"). It doesn't work and I get these errors in the output panel:
_____
1120: Access of undefined property stage.
1120: Access of undefined property moveMC.
1120: Access of undefined property keyPressed.
1120: Access of undefined property keyReleased.
1120: Access of undefined property rotateMC.
_____
Any help is appreciated. Thanks in advance.

package
{
import flash.display.MovieClip;
import flash.events.*;

class BallGameClass extends MovieClip
{
var yspeed:Number = 0;
var xspeed:Number = 0;
var wind:Number = 0.00;
var power:Number = 0.65;
var gravity:Number = 0.1;
var upconstant:Number = 0.75;
var friction:Number = 0.99;








var upKeyDown:Boolean = false;
var downKeyDown:Boolean = false;
var leftKeyDown:Boolean = false;
var rightKeyDown:Boolean = false;
stage.addEventListener(Event.ENTER_FRAME, moveMC);
function moveMC(event:Event):void {
this.y = this.y + yspeed;
this.x = this.x + xspeed;

xspeed = (xspeed + wind) * friction;
yspeed = yspeed + gravity;




if (upKeyDown == true) {
yspeed = yspeed - power * upconstant;
}
if (downKeyDown == true) {
yspeed = yspeed + power * upconstant;
}
if (leftKeyDown == true) {
xspeed = xspeed - power;
}
if (rightKeyDown == true) {
xspeed = xspeed + power;
}
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
function keyPressed(event:KeyboardEvent):void
{
if (event.keyCode == 38){
upKeyDown = true;
}
if (event.keyCode == 37){
leftKeyDown = true;
}
if (event.keyCode == 39){
rightKeyDown = true;
}
if (event.keyCode == 40){
downKeyDown = true;
}
}
function keyReleased(event:KeyboardEvent):void
{
if (event.keyCode == 38){
upKeyDown = false;
}
if (event.keyCode == 37){
leftKeyDown = false;
}
if (event.keyCode == 39){
rightKeyDown = false;
}
if (event.keyCode == 40){
downKeyDown = false;
}
}


function convert(radians:Number):Number {
var degrees = radians * (180 / Math.PI);
return degrees;
}


stage.addEventListener(Event.ENTER_FRAME, rotateMC);
function rotateMC(event:Event):void {
var adjacent:Number = this.x - mouseX;
var opposite:Number = this.y - mouseY;
var angle:Number = Math.atan2(opposite, adjacent);
this.rotation = (convert(angle))-90;
}

}
}

senocular
07-14-2008, 09:40 PM
you need to put your addEventListener calls in a function which is called in the scope of an instance of your class. They shouldn't go in the class body. You'll most likely want to put them in your constructor, the function that gets called when an instance is created. It has the same name as the class itself.

SergeantFlash
07-14-2008, 10:21 PM
Thanks for your reply senocular! I put all my addEventListener calls in a constructor function but now I get this message in the Output panel:
ReferenceError: Error #1065: Variable BallGameClass is not defined.
This is what my code looks like now:
package
{
import flash.display.MovieClip;
import flash.events.*;

class BallGameClass extends MovieClip
{

public function BallGameClass() {
stage.addEventListener(Event.ENTER_FRAME, moveMC);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
stage.addEventListener(Event.ENTER_FRAME, rotateMC);
}


var yspeed:Number = 0;
var xspeed:Number = 0;
var wind:Number = 0.00;
var power:Number = 0.65;
var gravity:Number = 0.1;
var upconstant:Number = 0.75;
var friction:Number = 0.99;








var upKeyDown:Boolean = false;
var downKeyDown:Boolean = false;
var leftKeyDown:Boolean = false;
var rightKeyDown:Boolean = false;

function moveMC(event:Event):void {
this.y = this.y + yspeed;
this.x = this.x + xspeed;

xspeed = (xspeed + wind) * friction;
yspeed = yspeed + gravity;




if (upKeyDown == true) {
yspeed = yspeed - power * upconstant;
}
if (downKeyDown == true) {
yspeed = yspeed + power * upconstant;
}
if (leftKeyDown == true) {
xspeed = xspeed - power;
}
if (rightKeyDown == true) {
xspeed = xspeed + power;
}
}

function keyPressed(event:KeyboardEvent):void
{
if (event.keyCode == 38){
upKeyDown = true;
}
if (event.keyCode == 37){
leftKeyDown = true;
}
if (event.keyCode == 39){
rightKeyDown = true;
}
if (event.keyCode == 40){
downKeyDown = true;
}
}
function keyReleased(event:KeyboardEvent):void
{
if (event.keyCode == 38){
upKeyDown = false;
}
if (event.keyCode == 37){
leftKeyDown = false;
}
if (event.keyCode == 39){
rightKeyDown = false;
}
if (event.keyCode == 40){
downKeyDown = false;
}
}


function convert(radians:Number):Number {
var degrees = radians * (180 / Math.PI);
return degrees;
}


function rotateMC(event:Event):void {
var adjacent:Number = this.x - mouseX;
var opposite:Number = this.y - mouseY;
var angle:Number = Math.atan2(opposite, adjacent);
this.rotation = (convert(angle))-90;
}

}
}

senocular
07-14-2008, 10:25 PM
define your class as public

public class BallGameClass ...

SergeantFlash
07-14-2008, 10:35 PM
oh right, thanks!