0

我正在做一个学校项目,我需要在一组粒子和一个盒子之间进行碰撞,这是我当前的代码:

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

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

我收到一条错误消息,告诉我我试图通过静态类型类的引用来调用未定义的方法(命中点)。

任何帮助将不胜感激,谢谢!

这是粒子的代码。

package

{ 导入 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);
    }

}

}

我将本教程用于粒子,我的目标是为它们添加碰撞

4

3 回答 3

1

编辑:现在更新了我的答案,Particle代码已经发布。

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

确保你hitTestPoint在你的Particle类中定义。然后,不是 ,而是Particle.hitTestPointtry 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();
    }
}
于 2012-05-21T15:16:00.423 回答
1

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

您的Particle课程没有hitTestPoint功能 - 但它包含一个DisplayObject功能。因此,考虑到这两件事,您可以使用particles[i].clip.hitTestPoint.

下一个问题:您试图将 Square传递给 hitTest 而不是实例。而且,它仍然hitTestPoint以单个点为参数,而不是像正方形所代表的对象。所以你可能想hitTestObject改用。

于 2012-05-22T17:11:49.370 回答
1

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

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

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

于 2012-05-22T17:04:49.193 回答