这是我第一次在这里发帖:)
我在我的项目中创建了三个类(游戏开始),我对AS3很新。
首先我创建了一个名为player的类,其中包含ball_A的运动。 然后我创建了一个叫做敌人的类,它将包含ball_B的运动。
在我的主课程中,我创建了对玩家和敌人类的引用,并尝试根据我的玩家类分配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
我想让连接到我的主类的.fla中的两个符号具有玩家类和敌人类的功能。 (由于代码基本相同,没有显示敌人)
但是当我尝试使用此代码时,我收到此错误:TypeError:错误#1009:无法访问空对象引用的属性或方法。 在球员() 在Main()
我认为这是因为我的eventListeners没有返回任何内容,因为它们是无效的。如何在不必在一个类中编写所有移动命令的情况下解决这个问题?
很抱歉,如果我的英语不是很好,或者我输入此代码有什么问题。这是我第一次在这里发帖,所以我很乐意接受任何评论
答案 0 :(得分:0)
我认为问题在于,在播放器添加到舞台之前,您在Player中指的是“舞台”。事实上,玩家永远不会被添加到舞台上,因此,玩家永远无法进入舞台。 在Main中,将你的玩家和敌人添加到舞台上:
addChild(playerClass);
addChild(enemyClass);
并在您的Player和Enemy类的构造函数中添加:
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
}