-1

ボールの重さで悩んでいます。重力とバウンス レベルを適用できますが、ウェイトを追加する方法はわかりません。「ロックボール」と「ゴムボール」を作って、弾む様子を視覚的に比較したいです。

0.5 秒ごとに呼び出される関数をコーディングしました。

    this.applyGravity = function(gravity, bouncingLevel){
        this.ySpeed += gravity;
        this.move(0, this.ySpeed);

        if(this.getY() + this.getHeight() > this.bottomBoundary)
        {
            this.setY(this.bottomBoundary - this.getHeight());
            this.ySpeed = 0;
            this.counter = 0;
        }
    }

あなたの助けと時間をありがとう、GaL

4

1 に答える 1

1

「bounceLevel」は一般に「復元」と呼ばれ、衝突しているオブジェクトに適用されます。

通常、回復は 0.0 ~ 1.0 の範囲です。

1.0 は、オブジェクトが完全に弾むことを意味します。したがって、衝突中に速度が失われることはありません。

0.0 は、オブジェクトが衝突中にすべての速度を失うことを意味します。そのため、オブジェクトは「飛び散り」、まったくバウンドしません。

衝突に反発を追加する方法は次のとおりです。

警告:私は以下のコードを試していません...頭のてっぺんから.デバッグする必要があるかもしれません!

// create a flag to tell us whether we are currently colliding
var isColliding=false;

// Create a "squash"
// When an object collides, it can get shorter/fatter
// This squash variable simulates the object as it un-squashes
var squash=0;

this.applyGravity = function(gravity, bouncingLevel){

if(isColliding){

    // un-squash the object at ySpeed
    // note: ySpeed should be negative at this point
    squash += this.ySpeed;

    // if we're all un-squashed, show the object's motion again
    if(squash<0){
        // since squash<0 the object will now rise
        // above the boundary and start moving upward
        this.setY(this.getHeight+squash);
        // all done colliding...clear the flag
        isColliding=false;
    }

    return;
}

this.ySpeed += gravity;
this.move(0, this.ySpeed);

if(this.getY() + this.getHeight() > this.bottomBoundary)
{
    // set the new after-collision speed
    this.ySpeed = -this.ySpeed*bouncingLevel;

    // set the collision flag
    isColliding=true;

    // calculate squash:
    // == how far the object's momentum carried it into the boundary
    squash = this.getY() + this.getHeight();

    // visually set the object on bottomBoundary until it "rebounds"
    // alternatively, you could let it visually fall under the boundary
    this.setY(this.bottomBoundary - this.getHeight());

    this.counter = 0;
}

}

于 2013-04-21T23:54:27.307 に答える