【问题标题】:AS3 HitTest between classes?类之间的 AS3 HitTest?
【发布时间】:2012-02-07 20:26:54
【问题描述】:

我会尽量解释清楚,但是真的很难解释。我是 AS3 的新手,所以如果你要帮助我,请帮助我,直到我们解决它。请粘贴代码示例,而不是仅仅说我应该怎么做。

好的。 在主时间线上我是这样说的。

这里的计时器每秒钟都会增加敌人!

var Enemy:MovieClip = new Enemy();
addChild(Enemy);
Enemy.x = 200;
Enemy.y = 200;

又一次每 0.5 秒添加一次子弹!

var Bullet:MovieClip = new Bullet();
addChild(Enemy);
Bullet.x = 400;
Bullet.y = 400;

然后在 Enemy.as 和 Bullet.as 中,我有代码说明它应该如何行进、速度等。但是我如何在它们之间进行 hitTest 呢?我试过在这样的敌人或子弹类中做到这一点。

所以我基本问我如何才能hitTest 两个类相互对抗?还是一个类的对象?

【问题讨论】:

  • Flixel (www.flixel.org) 是在 Flash 中开始游戏编程的绝佳工具。有大量的教程,与从头开始工作相比,你可以更快地完成一个工作游戏。我强烈建议您为您的第一个游戏使用库/框架,您将学到很多东西,同时仍然可以制作一些很酷的东西。

标签: actionscript-3 class hittest


【解决方案1】:

你需要保留那些敌人和子弹的参考。不要做 var 敌人:MovieClip = new Enemy();而是这样做。

var myEnemyList:Array = new Array();
var myBulletList:Array = new Array();


function Init():void{
    addEventListener(Event.OnEnterFrame, Update);
}

function Update(){
    //this will create a bullet and an enemy at every frame

    //Create a new enemy
    var enemy:Enemy = new Enemy();
    myEnemyList.push(enemy); //add enemy to the array

    //Create a new bullet
    var enemy:Bullet = new Bullet();
    myBulletlist.push(bullet);


    //Update the bullets
    for(var i:int=0; i < myBulletlist.length; i++){
        myBulletlist[i].Update(); //you must implement this function inside your class bullet
    }

    //Update the enemies
    for(var i:int=0; i < myEnemyList.length; i++){
        myEnemyListt[i].Update(); //you must implement this function inside your class enemy
    }

    CheckForCollision();
}


function CheckForCollision(){
    for(var i:int=0; i < myEnemyList.length; i++){
        for(var j:int =0; j < myBulletList.length; j++){
            if( myEnemyList[i].collidesWith(myBulletList[j]) ){
                //Collision
            }
        }
    }
}

顺便说一句,不要试图编译它几乎是伪代码。我会回答你的问题。还有很多关于这方面的教程,谷歌搜索会帮助你获得更具体的代码。

【讨论】:

  • 您好,感谢您的评论。但是,我在主时间线上生成(创建)我的敌人和子弹。然后我有 Enemy.as 和 Bullet.as,我在其中编写代码它们应该如何移动以及什么是 hitTest agiast.?那是我的问题?我不完全如何使用类进行编码。但这实际上是我在比赛中必须做的最后一件事。我考虑过但自己无法真正做到的一个解决方案是,如果我在主时间轴上生成子弹,并将它们制作成一个数组,然后在 Enemy.as 中引用主时间轴上的这个数组?抱歉英语不好,也许没有建设性的帖子......哈哈:)
  • 如果它们出现在主时间线上,您可以添加一个事件 addEventListener(Event.AddedToStage, AddToArray);您可以使用它来将新创建的敌人/子弹添加到列表中
  • 谢谢!我没有这样做,但我使用了数组,效果很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2014-01-30
相关资源
最近更新 更多