1

我试图将下面的代码编码到来自教程的包中,但它最初在时间轴中

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

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

private var player:Player;

    public function RamboCat() 
    {

    player = new Player();

所以 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
 }
}
 }
4

2 回答 2

0

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

所以 Player 需要是一个类。如果您使用的是 Adob​​e Flash Professional,您可以右键单击库中的图像,单击属性,动作脚本选项卡,然后导出到动作脚本(确保该类名为 Player)。这将为您创建图像的类。

如果您使用的不是 Adob​​e Flash Professional,请告诉我,我会帮助您使用 IDE。

编辑:回首往事,如果您还没有完成,您还需要导入键盘类。

于 2013-01-09T23:08:45.343 回答
0

看起来你需要一个 Player 的导入声明。

要导入单个类:

import your.package.name.ClassName;

要导入包中的每个类:

import your.package.name.*;

所以你需要:

import xxx.Player;

其中 xxx 是 Player 类所在的包。

于 2013-01-09T23:16:34.367 回答