1180:调用可能未定义的方法Player

时间:2013-01-09 23:00:37

标签: actionscript-3 flash

我试图将下面的代码编写成一个来自教程的软件包,但它最初是在时间轴中编写的

现在它给出错误1180:调用可能未定义的方法Player。

这是相关代码的一个片段(完整代码在下面)

private var player:Player;

    public function RamboCat() 
    {

    player = new Player();

所以播放器没有定义。这是否意味着它缺少AS文件或其他东西 但我试图告诉flash使用图像(图像是实例化'播放器')

我添加了上面的代码(减去已经存在的公共函数),因为我找到了 一个解释我的来源应该添加:http://www.actionscript.org/forums/showthread.php3?t=268065

我对“包”和“导入”事物的体验有点低。希望你能提供帮助。

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

public class RamboCat extends MovieClip 
{
    var leftPressed:Boolean = false;
    var rightPressed:Boolean = false;
    var upPressed:Boolean = false;
    var downPressed:Boolean = false;

    var leftBumping:Boolean = false;
    var rightBumping:Boolean = false;
    var upBumping:Boolean = false;
    var downBumping:Boolean = false;

    var leftBumpPoint:Point = new Point(-30, -55);
    var rightBumpPoint:Point = new Point(30, -55);
    var upBumpPoint:Point = new Point(0, -120);
    var downBumpPoint:Point = new Point(0, 0);

    var scrollX:Number = 0;
    var scrollY:Number = 500;

    var xSpeed:Number = 0;
    var ySpeed:Number = 0;

    var speedConstant:Number = 4;
    var frictionConstant:Number = 0.9;
    var gravityConstant:Number = 1.8;
    var jumpConstant:Number = -35;
    var maxSpeedConstant:Number = 18;

    var doubleJumpReady:Boolean = false;
    var upReleasedInAir:Boolean = false;

    var keyCollected:Boolean = false;
    var doorOpen:Boolean = false;

    var currentLevel:int = 1;

    var animationState:String = "idle";

    var bulletList:Array = new Array();
    var enemyList:Array = new Array();
    var bumperList:Array = new Array();

    private var player:Player;

    public function RamboCat() 
    {


    player = new Player();

    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
    stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);

    stage.addEventListener(Event.ENTER_FRAME, loop);

    addEnemiesToLevel1();
    addBumpersToLevel1();
    }
    public function addEnemiesToLevel1():void
{
addEnemy(620, -115);
addEnemy(900, -490);
addEnemy(2005, -115);
addEnemy(1225, -875);
}

    public function addBumpersToLevel1():void
{
addBumper(500, -115);
addBumper(740, -115);
}


    public function loop(e:Event):void{
if(back.collisions.hitTestPoint(player.x + leftBumpPoint.x, player.y + leftBumpPoint.y, true)){
    //trace("leftBumping");
    leftBumping = true;
} else {
    leftBumping = false;
}

if(back.collisions.hitTestPoint(player.x + rightBumpPoint.x, player.y + rightBumpPoint.y, true)){
    //trace("rightBumping");
    rightBumping = true;
} else {
    rightBumping = false;
}

if(back.collisions.hitTestPoint(player.x + upBumpPoint.x, player.y + upBumpPoint.y, true)){
    //trace("upBumping");
    upBumping = true;
} else {
    upBumping = false;
}

if(back.collisions.hitTestPoint(player.x + downBumpPoint.x, player.y + downBumpPoint.y, true)){
    //trace("downBumping");
    downBumping = true;
} else {
    downBumping = false;
}   


if(leftPressed){
    xSpeed -= speedConstant;
    player.scaleX = -1;

} else if(rightPressed){
    xSpeed += speedConstant;
    player.scaleX = 1;
}

 /*if(upPressed){
ySpeed -= speedConstant;

} else if(downPressed){
ySpeed += speedConstant;

}*/

if(leftBumping){
    if(xSpeed < 0){
        xSpeed *= -0.5;
    }
}

if(rightBumping){
    if(xSpeed > 0){
        xSpeed *= -0.5;
    }
}

if(upBumping){
    if(ySpeed < 0){
        ySpeed *= -0.5;
    }
}

if(downBumping){ //if we are touching the floor
    if(ySpeed > 0){ 
        ySpeed = 0; //set the y speed to zero
    }
    if(upPressed){ //and if the up arrow is pressed
        ySpeed = jumpConstant; //set the y speed to the jump constant
    }

    //DOUBLE JUMP
    if(upReleasedInAir == true){
        upReleasedInAir = false;
    }
    if(doubleJumpReady == false){
        doubleJumpReady = true;
    }
} else { //if we are not touching the floor

    ySpeed += gravityConstant; //accelerate downwards

    //DOUBLE JUMP
    if(upPressed == false && upReleasedInAir == false){
        upReleasedInAir = true;
        //trace("upReleasedInAir");
    }
    if(doubleJumpReady && upReleasedInAir){
        if(upPressed){ //and if the up arrow is pressed
            //trace("doubleJump!");
            doubleJumpReady = false;
            ySpeed = jumpConstant; //set the y speed to the jump constant
        }
    }

}

if(keyCollected == false){
    if(player.hitTestObject(back.other.doorKey)){
        back.other.doorKey.visible = false;
        keyCollected = true;
        trace("key collected");
    }
}

if(doorOpen == false){
    if(keyCollected == true){
        if(player.hitTestObject(back.other.lockedDoor)){
            back.other.lockedDoor.gotoAndStop(2);
            doorOpen = true;
            trace("door open");
        }
    }
}


if(xSpeed > maxSpeedConstant){ //moving right
    xSpeed = maxSpeedConstant;
} else if(xSpeed < (maxSpeedConstant * -1)){ //moving left
    xSpeed = (maxSpeedConstant * -1);
}

xSpeed *= frictionConstant;
ySpeed *= frictionConstant;

if(Math.abs(xSpeed) < 0.5){
    xSpeed = 0;
}

scrollX -= xSpeed;
scrollY -= ySpeed;

back.x = scrollX;
back.y = scrollY;

sky.x = scrollX * 0.2;
sky.y = scrollY * 0.2;

if( ( leftPressed || rightPressed || xSpeed > speedConstant || xSpeed < speedConstant *-1 ) && downBumping){
    animationState = "running";
} else if(downBumping){
    animationState = "idle";
} else {
    animationState = "jumping";
}

if(player.currentLabel != animationState){
    player.gotoAndStop(animationState);
}


if (enemyList.length > 0) // if there are any enemies left in the enemyList
{
    for (var i:int = 0; i < enemyList.length; i++) // for each enemy in the enemyList
    {
        if (bulletList.length > 0) // if there are any bullets alive
        {
            for (var j:int = 0; j < bulletList.length; j++) // for each bullet in the bulletList
            {
                if ( enemyList[i].hitTestObject(bulletList[j]) )
                {
                    trace("Bullet and Enemy are colliding");
                    enemyList[i].removeSelf();
                    bulletList[j].removeSelf();
                }

                // enemyList[i] will give you the current enemy
                // bulletList[j] will give you the current bullet
                // this will check all combinations of bullets and enemies
                // and see if any are colliding
            }
        }
    }
}

 //corralling the bad guys with bumpers
if (enemyList.length > 0){ //enemies left in the enemyList?
    for (var k:int = 0; k < enemyList.length; k++){ // for each enemy in the enemyList
        if (bumperList.length > 0){
            for (var h:int = 0; h < bumperList.length; h++){ // for each bumper in the List
                if ( enemyList[k].hitTestObject(bumperList[h]) ){
                    enemyList[k].changeDirection();
                    }
                }
            }
        }
    }

 //player and enemy collisions
if (enemyList.length > 0){ //enemies left?
    for (var m:int = 0; m < enemyList.length; m++){ // for each enemy in the enemyList
        if ( enemyList[m].hitTestObject(player) ){
            trace("player collided with enemy");
            //code to damage player goes here, maybe integrate with a health bar?                           
            enemyList[m].removeSelf();
        }
    }
}

 }

    public function nextLevel():void{
currentLevel++;
trace("Next Level: " + currentLevel);
if(currentLevel == 2){
   gotoLevel2();
}
// can be extended...
// else if(currentLevel == 3) { gotoLevel3(); } // etc, etc.    
}

    public function gotoLevel2():void{
back.other.gotoAndStop(2);
back.visuals.gotoAndStop(2);
back.collisions.gotoAndStop(2);
scrollX = 0;
scrollY = 500;

keyCollected = false;
back.other.doorKey.visible = true;
doorOpen = false;
back.other.lockedDoor.gotoAndStop(1);
}

    public function keyDownHandler(e:KeyboardEvent):void{
if(e.keyCode == Keyboard.LEFT){
    leftPressed = true;

} else if(e.keyCode == Keyboard.RIGHT){
    rightPressed = true;

} else if(e.keyCode == Keyboard.UP){
    upPressed = true;

} else if(e.keyCode == Keyboard.DOWN){
    downPressed = true;
    if(doorOpen && player.hitTestObject(back.other.lockedDoor)){
        //proceed to the next level if the player is touching an open door
        nextLevel();
    }
}
}

    public function keyUpHandler(e:KeyboardEvent):void{
if(e.keyCode == Keyboard.LEFT){
    leftPressed = false;

} else if(e.keyCode == Keyboard.RIGHT){
    rightPressed = false;

} else if(e.keyCode == Keyboard.UP){
    upPressed = false;

} else if(e.keyCode == Keyboard.DOWN){
    downPressed = false;
}

if(e.keyCode == Keyboard.SPACE){
    fireBullet();
}
 }

    public function fireBullet():void
{
var playerDirection:String;
if(player.scaleX < 0){
    playerDirection = "left";
} else if(player.scaleX > 0){
    playerDirection = "right";
}
var bullet:Bullet = new Bullet(player.x - scrollX, player.y - scrollY, playerDirection, xSpeed);
back.addChild(bullet);

bullet.addEventListener(Event.REMOVED, bulletRemoved);
bulletList.push(bullet);

 }

    public function bulletRemoved(e:Event):void
 {
e.currentTarget.removeEventListener(Event.REMOVED, bulletRemoved); //this just removes the eventListener so we don't get an error
bulletList.splice(bulletList.indexOf(e.currentTarget), 1); 
 //this removes 1 object from the bulletList, at the index of whatever object caused this function to activate
 }

    public function addEnemy(xLocation:int, yLocation:int):void
 {
var enemy:Enemy = new Enemy(xLocation, yLocation);
back.addChild(enemy);
enemy.addEventListener(Event.REMOVED, enemyRemoved);
enemyList.push(enemy);
 }

    public function addBumper(xLocation:int, yLocation:int):void
 {
var bumper:Bumper = new Bumper(xLocation, yLocation);
back.addChild(bumper);
bumper.visible = false;
bumperList.push(bumper);
 }

    public function enemyRemoved(e:Event):void
 {
e.currentTarget.removeEventListener(Event.REMOVED, enemyRemoved);
  //this just removes the eventListener so it doesn't give an error
enemyList.splice(enemyList.indexOf(e.currentTarget), 1); //this removes 1 object from the enemyList, at the index of whatever object caused this function to activate
 }
}
 }

2 个答案:

答案 0 :(得分:0)

它不能作为对玩家实例的引用:new Player();创建一个新的Player实例。

所以玩家需要成为一个班级。如果您使用的是Adobe Flash Professional,则可以右键单击库中的图像,单击属性,actionscript选项卡,然后导出到actionscript(确保该类称为Player)。这将为您创建图像类。

如果您不使用Adobe Flash专业版,请告知我们,我将帮助您使用所使用的IDE。

编辑:回顾一下,如果你还没有,你还需要导入键盘类。

答案 1 :(得分:0)

看起来你需要一个Player的导入语句。

要导入单个类:

import your.package.name.ClassName;

导入包中的每个类:

import your.package.name.*;

所以你需要:

import xxx.Player;

其中xxx是Player类所在的包。