Actionscript 3 ActionScript 3中hitTestObject的问题

Actionscript 3 ActionScript 3中hitTestObject的问题,actionscript-3,flash,actionscript,action,Actionscript 3,Flash,Actionscript,Action,我只是试着在子弹和敌人两个阵型中循环,然后我在这两个阵型上执行hitTestObject,但是直到敌人真正靠近玩家或子弹,它才开始工作。 这是我的代码对不起,我的代码太草率了` // ******* IMPORTS ***** import flash.events.MouseEvent; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import fla

我只是试着在子弹和敌人两个阵型中循环,然后我在这两个阵型上执行hitTestObject,但是直到敌人真正靠近玩家或子弹,它才开始工作。 这是我的代码对不起,我的代码太草率了`

// ******* IMPORTS *****
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.events.KeyboardEvent;

//*****VARIABLES****

var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
var upPressed:Boolean = false;
var shootDown:Boolean = false;

var ySpeed:int = 0;
var xSpeed:int = 0;

var scrollX:int = 0;
var scrollY:int = 0;

var speedConstant:int = 5;

var friction:Number = 0.6;

var level:Number = 1;

var bullets:Array;
var container_mc:MovieClip; 
var enemies:Array;
var tempEnemy:MovieClip;


// BUTTON EVENTS EITHER CLICKED OR NOT

left_btn.addEventListener(MouseEvent.MOUSE_DOWN, moveLeft);
right_btn.addEventListener(MouseEvent.MOUSE_DOWN, moveRight);
up_btn.addEventListener(MouseEvent.MOUSE_DOWN, moveUp);
shoot_btn.addEventListener(MouseEvent.MOUSE_DOWN, shootPressed);

left_btn.addEventListener(MouseEvent.MOUSE_UP, leftUp);
right_btn.addEventListener(MouseEvent.MOUSE_UP, rightUp);
up_btn.addEventListener(MouseEvent.MOUSE_UP, upUp);

stage.addEventListener(Event.ENTER_FRAME, makeEnemies);



player.gotoAndStop('still');


stage.addEventListener(Event.ENTER_FRAME,onenter);

function onenter(e:Event):void{
    if (rightPressed == true && leftPressed == false){
        player.x += 8;
        player.scaleX = 1;
        player.gotoAndStop("walking");
        cloud.x -= 8;


    } else if (leftPressed == true && rightPressed == false){
        player.x -= 8;
        player.scaleX = -1;
        player.gotoAndStop('walking');
        cloud.x += 8;

   } else if(upPressed == true && leftPressed == false && rightPressed == false){


       }
        else{  
        rightPressed = false;
        leftPressed = false;
        player.gotoAndStop('still')}

}
// **** MOVEMENT CONTROLS *********



function shootPressed(e:MouseEvent):void{
    shootDown = true;
    if(shootDown == true){
        fireBullet();
        testCollisions();
        }

    }


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, player.y, playerDirection);
    bullets = new Array();
    bullet.y = 288;
    stage.addChild(bullet);
    bullets.push(bullet);
    trace(bullets);

}

// BUTTON FUNCTIONS

function moveLeft(e:MouseEvent):void
{
    if(MouseEvent.MOUSE_DOWN){
    leftPressed = true;
    }else if (MouseEvent.MOUSE_UP) {
        leftPressed = false;
        }

}
function moveRight(e:MouseEvent):void
{
    if (MouseEvent.MOUSE_DOWN){
    rightPressed = true;
    }else if (MouseEvent.MOUSE_UP){
        rightPressed = false;
        }

}
function moveUp(e:MouseEvent):void
{
    if(MouseEvent.MOUSE_DOWN){
        upPressed = true;
        } else if (MouseEvent.MOUSE_UP) {
            upPressed = false;
            }

}



function leftUp(e:MouseEvent):void
{
    leftPressed = false;
}
function rightUp(e:MouseEvent):void
{
    rightPressed = false;
}
function upUp(e:MouseEvent):void
{
    upPressed = false;
}




enemies = new Array();

//Call this function for how many enemies you want to make...
function makeEnemies(e:Event):void
{
    var chance:Number = Math.floor(Math.random() * 60);
if (chance <= 2){

    //Make sure a Library item linkage is set to Enemy...
    tempEnemy = new enemy();
    tempEnemy.speed = 80;
    tempEnemy.x = Math.round(Math.random() * stage.stageWidth) * -10;
    addChild(tempEnemy);
    enemies.push(tempEnemy);
    moveEnemies();
    }
}


function moveEnemies():void
{
    var tempEnemy:MovieClip;
    for (var i:int =enemies.length-1; i>=0; i--)
    {
        tempEnemy = enemies[i];
        tempEnemy.x += tempEnemy.speed;
        tempEnemy.y = 285;
    }
}



//Check for collisions between an enemies array and a Lasers array
function testCollisions():void
{

    var tempEnemy:MovieClip;
    var tempLaser:MovieClip;

    Enemy:for (var i:int=enemies.length-1; i >= 0; i--)
    {
        tempEnemy = enemies[i];
        for (var j:int=bullets.length-1; j>=0; j--)
        {
            tempLaser = bullets[j];
            if (tempLaser.hitTestObject(tempEnemy))
            {
                removeChild(tempEnemy);
                trace("BULLET HIT");
                break Enemy;
            } else if(tempEnemy.hitTestObject(player)){
                removeChild(tempEnemy);
                trace("HIT PLAYER");
                }
        }
    }
}
//*******导入*****
导入flash.events.MouseEvent;
导入flash.events.Event;
导入flash.events.KeyboardEvent;
导入flash.events.MouseEvent;
导入flash.display.MovieClip;
导入flash.events.KeyboardEvent;
//*****变数****
var leftPressed:Boolean=false;
var rightPressed:Boolean=false;
var upPressed:Boolean=false;
变量分解:布尔值=false;
var ySpeed:int=0;
var xSpeed:int=0;
变量x:int=0;
变量scrollY:int=0;
变量速度常数:int=5;
var摩擦:数值=0.6;
风险值级别:数字=1;
变量:数组;
var容器:MovieClip;
变种敌人:阵列;
敌人:电影唇;
//按钮事件单击或未单击
left_btn.addEventListener(MouseEvent.MOUSE_DOWN,moveLeft);
右键\u btn.addEventListener(MouseEvent.MOUSE\u DOWN,moveRight);
up_btn.addEventListener(MouseEvent.MOUSE_DOWN,moveUp);
shoot_btn.addEventListener(MouseEvent.MOUSE_DOWN,shootPressed);
left_btn.addEventListener(MouseEvent.MOUSE_UP,leftUp);
right_btn.addEventListener(MouseEvent.MOUSE_UP,rightUp);
up_btn.addEventListener(MouseEvent.MOUSE_up,upUp);
stage.addEventListener(Event.ENTER_FRAME,makeForeigns);
player.gotoAndStop('still');
stage.addEventListener(事件输入框,oneter);
函数集合(e:事件):无效{
if(rightspressed==true&&leftPressed==false){
player.x+=8;
player.scaleX=1;
游戏者。停止(“行走”);
云x-=8;
}else if(leftPressed==true&&righpressed==false){
player.x-=8;
player.scaleX=-1;
player.gotoAndStop('walking');
云x+=8;
}else if(upPressed==true&&leftPressed==false&&righpressed==false){
}
否则{
右压=假;
leftPressed=false;
player.gotoAndStop('still')}
}
//****移动控制*********
功能按下(e:MouseeEvent):无效{
击落=正确;
如果(分解==真){
火弹();
testCollisions();
}
}
函数fireball():void
{
变量playerDirection:字符串;
如果(player.scaleX<0){
playerDirection=“左”;
}else if(player.scaleX>0){
playerDirection=“右”;
}
变量子弹:子弹=新子弹(player.x,player.y,playerDirection);
项目符号=新数组();
bullet.y=288;
阶段。添加儿童(子弹);
子弹。推(子弹);
痕迹(子弹);
}
//按钮功能
函数moveLeft(e:MouseEvent):void
{
if(MouseEvent.MOUSE_DOWN){
leftPressed=true;
}else if(MouseEvent.MOUSE\u UP){
leftPressed=false;
}
}
函数moveRight(e:MouseEvent):void
{
if(MouseEvent.MOUSE_DOWN){
rightspressed=true;
}else if(MouseEvent.MOUSE\u UP){
右压=假;
}
}
函数向上移动(e:MouseEvent):无效
{
if(MouseEvent.MOUSE_DOWN){
upPressed=true;
}else if(MouseEvent.MOUSE\u UP){
upPressed=false;
}
}
函数leftUp(e:MouseEvent):void
{
leftPressed=false;
}
函数rightUp(e:MouseEvent):void
{
右压=假;
}
函数upUp(e:MouseEvent):void
{
upPressed=false;
}
敌人=新阵列();
//调用此函数可计算您要创建多少敌人。。。
函数(e:事件):无效
{
var chance:Number=Math.floor(Math.random()*60);
如果(机会=0;i--)
{
敌人=敌人[我];
temp敌方.x+=temp敌方.speed;
tempy=285;
}
}
//检查敌人阵列和激光阵列之间的碰撞
函数testCollisions():void
{
敌人:电影唇;
var模板器:MovieClip;
敌人:for(变量i:int=bygors.length-1;i>=0;i--)
{
敌人=敌人[我];
对于(变量j:int=bullets.length-1;j>=0;j--)
{
tempLaser=子弹[j];
if(tempLaser.hitTestObject(tempTowner))
{
removeChild(临时敌人);
痕迹(“子弹击中”);
击溃敌人;
}else if(临时敌人.命中测试对象(玩家)){
removeChild(临时敌人);
跟踪(“命中玩家”);
}
}
}
}

`

当按下“拍摄”按钮时,您似乎只是在检查碰撞,这可以解释为什么碰撞不会很快发生。我怀疑您想改为每帧运行
testCollisions

stage.addEventListener(Event.ENTER_FRAME, testCollisions);

是的,我真的很沮丧,想了想,当按下shoot时,我会调用它,这解决了它,谢谢…现在的问题是我得到了一个错误类型error:error#1009:无法访问null对象引用的属性或方法。在Game_fla::MainTimeline/testCollisions()[Game_fla.MainTimeline::frame1:199]中,我得到这个错误,可能是因为testcollision函数的参数是e:Event??也许是的,可能就是这样,这能解决问题吗?现在我看了一下,可能是因为你的
项目符号
数组一开始没有初始化。我将第28行更改为
var-bullets:Array=new-Array()firebill()
中重新创建它。是的,这就解决了,谢谢。你介意我把你和另一个问题联系起来看看你能不能帮我,我不知道该怎么做,所以除了开始一个新问题外,我不知道如何再次发布代码。我意识到我的错误,调用shootPressed时调用了该函数,但现在我将其更改为每帧运行一次,并且该函数是否传递了e:Event参数并获得错误--TypeError:error 35; 1009:无法访问属性或空对象引用的方法。在Game_fla::MainTimeline/testCollisions()[Game_fla.MainTimeline::frame1:199]------------我如何解决这个问题?