我正在研究一个学校项目,我需要在一系列粒子和一个盒子之间发生碰撞,这是我目前的代码:
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作为粒子,我的目标是为它们添加碰撞
答案 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
。