0

私は学校のプロジェクトに取り組んでおり、粒子の配列とボックスの間で衝突を起こす必要があります。現在のコードは次のとおりです。

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);
    }

}

}

このチュートリアルをパーティクルに使用しました。私の目標は、パーティクルに衝突を追加することです

4

3 に答える 3

1

Particle クラスは、hitTestPoint メソッドを持つように MovieClip を拡張する必要があります。クラスを次のように変更してみてください。

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

より良い結果を得るために、コードに特定のクラスをインポートします (使用しているクラスとメソッドであるため、MovieClip クラスを参照してください)。

于 2012-05-22T17:04:49.193 に答える
1

編集:Particleコードが投稿されたので、私の答えを更新しました。

あなたのParticleクラスは を定義していませんhitTestPoint。それに加えて、ここでは必要ないと思う静的メソッドを呼び出しています...インスタンスメソッドが必要です。

クラスで必ず定義hitTestPointしてください。Particle次に、代わりにParticle.hitTestPoint、try 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ています。したがって、これら 2 つのことを念頭に置いて、 を使用してヒット テストを呼び出すことができますparticles[i].clip.hitTestPoint

次の問題:クラス Squareをインスタンスではなく hitTestに渡そうとしています。それでも、hitTestPoint正方形が表すようなオブジェクトではなく、単一の点を引数として取ります。hitTestObjectしたがって、おそらく代わりに使用したいと思うでしょう。

于 2012-05-22T17:11:49.370 に答える