粒子阵列和盒子之间的碰撞

时间:2012-05-21 14:48:54

标签: actionscript-3 flash collision particles

我正在研究一个学校项目,我需要在一系列粒子和一个盒子之间发生碰撞,这是我目前的代码:

for(var i : int = 0; i < particles.length; i++)
{
    particles[i].update();

    if(Particle.hitTestPoint(Square))
    {
        particle = particles.shift();
        particle.destroy();
    }
}

我收到一个错误,告诉我我试图通过静态类型类的引用调用未定义的方法(hittestpoint)。

非常感谢任何帮助,谢谢!

以下是粒子的代码。

package

{     import flash.display。*;

public class Particle
{
    public var clip : DisplayObject;

    public var xVel : Number = 0;
    public var yVel : Number = 0;

    public var drag : Number = 1;

    public var gravity : Number = 0.0;
    public var shrink : Number = 1;
    public var fade : Number = 0;
    public function Particle(symbolclass : Class, target : DisplayObjectContainer, xpos : Number, ypos : Number)
    {
        clip = new symbolclass();

        target.addChild(clip);

        clip.x= xpos;
        clip.y= ypos;

    }       
    public function update() : void
    {
        clip.x += xVel;
        clip.y += yVel;

        xVel *= drag;
        yVel *= drag;


        yVel+=gravity;

        clip.scaleX *= shrink;
        clip.scaleY *= shrink;

        clip.alpha -= fade;
    }
    public function destroy() :void
    {
        clip.parent.removeChild(clip);
    }

}

}

我使用this tutorial作为粒子,我的目标是为它们添加碰撞

3 个答案:

答案 0 :(得分:1)

修改:现在已发布Particle代码,我的答案已更新。

您的Particle班级未定义hitTestPoint。除此之外,你正在调用一个我认为你不想要的静态方法...你想要一个实例方法。

确保在hitTestPoint课程中定义Particle。然后,尝试Particle.hitTestPoint而不是particle.hitTestPoint(注意大写,它指的是类被更改为小写,引用实例。

试试这个:

for(var i : int = 0; i < particles.length; i++)
{
    var particle:Particle = particles[i];
    particles.update();

    if(particle.hitTestPoint(Square))
    {
        particle = particles.shift();
        particle.destroy();
    }
}

答案 1 :(得分:1)

Particle类必须扩展MovieClip才能拥有hitTestPoint方法。尝试将课程更改为:

import flash.display.MovieClip;
public class Particle extends MovieClip
{
    //code here

并在您的代码中导入特定的类(请参阅MovieClip类,因为这是您正在使用的类及其方法),以获得更好的结果作为良好实践。

答案 2 :(得分:1)

我不确定particle在该代码中引用了什么,因为它没有在您发布的内容中定义,但particles[i]是您要测试的粒子。

您的Particle课程没有hitTestPoint功能 - 但它包含DisplayObject课程。因此,考虑到这两点,您可以使用particles[i].clip.hitTestPoint调用命中测试。

下一个问题:您尝试将 Square传递给hitTest而不是实例。而且,hitTestPoint只需要一个点作为其参数,而不是像方形所代表的那样的对象。因此,您可能希望改为使用hitTestObject