Actionscript 3 向其他类中的符号声明移动

Actionscript 3 向其他类中的符号声明移动,actionscript-3,function,class,Actionscript 3,Function,Class,这是我第一次在这里发帖:) 我在我的项目中创建了三个类(游戏的开始),我对AS3非常陌生 首先,我创建了一个名为player wich的类,该类将包含ball_a的运动。 然后我创建了一个名为“敌人”的类,它将包含ball_B的运动 在我的主类中,我创建了对玩家和敌人类的引用,并尝试根据我的玩家类和enemyclass分配ball_A.x和ball_A.y坐标 这是我的主课 package { import flash.display.*; import flash.events.*; im

这是我第一次在这里发帖:)

我在我的项目中创建了三个类(游戏的开始),我对AS3非常陌生

首先,我创建了一个名为player wich的类,该类将包含ball_a的运动。 然后我创建了一个名为“敌人”的类,它将包含ball_B的运动

在我的主类中,我创建了对玩家和敌人类的引用,并尝试根据我的玩家类和enemyclass分配ball_A.x和ball_A.y坐标

这是我的主课

package  
{
import flash.display.*;
import flash.events.*;
import flash.ui.Keyboard;

public class Main extends MovieClip
{
    public var playerClass:player;
    public var enemyClass:enemy;



    public function Main()
    {
        playerClass = new player();
        enemyClass = new enemy();
        addChild(playerClass);
        addChild(enemyClass);

        ball_A.x = playerClass.ball_A_x;
        ball_A.y = playerClass.ball_A_y;

        ball_B.x = enemyClass.ball_B_x;
        ball_B.y = enemyClass.ball_B_y;



    }//Public function

}// Class

}// Package
这是我的玩家课程:

    package  {
import flash.display.*;
import flash.events.*;
import flash.ui.Keyboard;


public class player extends MovieClip
{

    var leftIsPressed:Boolean = false;
    var rightIsPressed:Boolean = false;
    var upIsPressed:Boolean = false;
    var downIsPressed:Boolean = false;
    var spaceIsPressed:Boolean = false;
    var rightCtrlIsPressed:Boolean = false;
    var speed:Number = 15;
    var vx:Number = 0;
    var vy:Number = 0;
    var ball_A_x:int = 0;
    var ball_A_y:int = 0;




    public function player() 
    {
        this.addEventListener(Event.ADDED_TO_STAGE, initialize);
    }

        private function initialize(e:Event):void 
        {
            //EventListeners
            this.removeEventListener(Event.ADDED_TO_STAGE, initialize);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
            stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
            stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);

        }




        //Functions

        function keyDownHandler(e:KeyboardEvent):void 
        {
            switch(e.keyCode) 
            {
                case Keyboard.LEFT : leftIsPressed = true; break;
                case Keyboard.RIGHT : rightIsPressed = true; break;
                case Keyboard.UP : upIsPressed = true; break;
                case Keyboard.DOWN : downIsPressed = true; break;
                case e.keyCode = 163 : rightCtrlIsPressed = true; break;

            }

        }

        function keyUpHandler(e:KeyboardEvent):void 
        {
            switch(e.keyCode)
            {
                case Keyboard.LEFT : leftIsPressed = false; break;
                case Keyboard.RIGHT : rightIsPressed = false; break;
                case Keyboard.UP : upIsPressed = false; break;
                case Keyboard.DOWN : downIsPressed = false; break;
                case e.keyCode = 163 :  rightCtrlIsPressed = false; break;
            }

        }

        function enterFrameHandler(e:Event):void 
        {
            vx = -int(leftIsPressed)*speed + int(rightIsPressed)*speed;
            vy = -int(upIsPressed)*speed + int(downIsPressed)*speed;

                ball_A_x += vx;
                ball_A_y += vy;

                if(ball_A_x >= 530)
                {
                    ball_A_x = 0;
                }
                else if(ball_A_x <= 0)
                {
                    ball_A_x = 530;
                }
                if(ball_A_y >= 370)
                {
                    ball_A_y = -28;
                }
                else if(ball_A_y <= -28)
                {
                    ball_A_y = 370;
                }

        }


    //}//Public function


}//Class
}//Package
包{
导入flash.display.*;
导入flash.events.*;
导入flash.ui.Keyboard;
公共类播放器扩展MovieClip
{
var leftIsPressed:Boolean=false;
var rightspressed:Boolean=false;
var upIsPressed:Boolean=false;
var downIsPressed:Boolean=false;
var spaceIsPressed:Boolean=false;
var rightcrlispressed:Boolean=false;
无功转速:数字=15;
变量vx:数值=0;
变量vy:Number=0;
var ball_A_x:int=0;
var ball_A_y:int=0;
公共函数播放器()
{
this.addEventListener(Event.ADDED_至_阶段,初始化);
}
私有函数初始化(e:事件):无效
{
//事件侦听器
this.removeEventListener(Event.ADDED_到_阶段,初始化);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keydowHandler);
stage.addEventListener(KeyboardEvent.KEY\u UP,keyUpHandler);
stage.addEventListener(Event.ENTER\u FRAME,enterFrameHandler);
}
//功能
函数keyDownHandler(e:KeyboardEvent):void
{
开关(如钥匙代码)
{
case Keyboard.LEFT:leftIsPressed=true;中断;
case Keyboard.RIGHT:rightspressed=true;中断;
case Keyboard.UP:upIsPressed=true;中断;
case Keyboard.DOWN:downipressed=true;中断;
案例e.keyCode=163:rightCtrlIsPressed=true;中断;
}
}
函数keyUpHandler(e:KeyboardEvent):void
{
开关(如钥匙代码)
{
case Keyboard.LEFT:leftIsPressed=false;中断;
case Keyboard.RIGHT:rightspressed=false;中断;
case Keyboard.UP:upIsPressed=false;中断;
case Keyboard.DOWN:downipressed=false;中断;
案例e.keyCode=163:rightCtrlIsPressed=false;中断;
}
}
函数enterFrameHandler(e:事件):void
{
vx=-int(左压)*速度+int(右压)*速度;
vy=-int(向上加压)*速度+int(向下加压)*速度;
球_A_x+=vx;
ball_A_y+=vy;
如果(ball_A_x>=530)
{
ball_A_x=0;
}
否则如果(球A_x=370)
{
ball_A_y=-28;
}

否则如果(ball_A_y我认为问题在于你指的是球员内部的“舞台”,在球员被添加到舞台之前。事实上,球员从未被添加到舞台,因此,球员将永远无法进入舞台。 在主界面中,将玩家和敌人添加到舞台上:

addChild(playerClass);
addChild(enemyClass);
在玩家和敌人类的构造函数中,添加:

this.addEventListener(Event.ADDED_TO_STAGE, initialize);

private function initialize(e:Event):void {
this.removeEventListener(Event.ADDED_TO_STAGE, initialize);
... other event listeners here, now that Player is on stage
}

谢谢,但我遇到了另一个错误:只能在类属性定义上使用private属性。这就是我的构造函数现在的样子:public function player(){this.addEventListener(Event.ADDED_TO_STAGE,initialize);function initialize(e:Event):void{//EventListeners this.removeventlistener(Event.ADDED_TO_STAGE,initialize);STAGE.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);STAGE.addEventListener(Event.ENTER_FRAME,enterFrameHandler);}我应该指出需要用“}关闭构造函数'在初始化函数之前。这也应该用'private'修复错误。我已经按照你说的做了,现在没有任何错误。但是现在我只看到我的一个符号(ball_B)当我按下键盘时,它不会移动OK,但这是另一个问题,对吗?我也看不到你的ball_A添加到舞台的任何地方。此外,enterFrameHandler似乎只调整ball_A_x和ball_A_y变量。这些值在Main的构造函数中只分配给ball_A的x和y值一次。对于要移动球,你需要在每一帧更新它的位置。另外,如果你在敌方类中有另一个enterFrame事件,我建议在主类中只有一个enterFrame事件,并从主类中的enterFrameHandler更新playerClass和enemyClass。