这是我第一次在这里发布:)
我在项目(游戏开始)中创建了三个类,并且对AS3还是很陌生。
首先,我创建了一个名为player wich的类,其中应包含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()的player()处
我认为这是因为我的事件监听器没有返回任何内容,因为它们是无效的。我如何解决这个问题而不必在一个类中编写所有的移动命令?
抱歉,如果我的英语不是很好,或者我在输入此代码时做错了什么。.这是我第一次在这里发布,所以我很乐意接受任何批评
我认为问题在于,在将Player添加到舞台之前,您是指Player中的“舞台”。实际上,Player永远不会添加到舞台上,因此,Player永远都无法访问舞台。在“主要”中,将“玩家”和“敌人”添加到场景中:
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
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句