0

だから私はこの bulletContainer クラスを取得しました。これはこれらすべての弾丸を発射し、クラスをムーブクリップに入れてステージに追加すると完全に正常に発射されます。bulletClass の関数を呼び出すと、存在しないというエラーが表示されるため、ムービー クリップに含めることはできません。さて、私の問題は、ステージにaddChild(bulletClass)を追加すると、動き/アニメーションを除いて、プログラムされたとおりに機能することです。弾丸は正常に動きますが、私が撃った場合を除いて、反対方向に撃ち、反対方向に撃つだけではなく、少し左に撃ちます(私がまっすぐ上を少し左に向けている場合)、完全に右に向けると回転して私と一緒に撃ちます。したがって、基本的には、私が言ったようにあらゆる点で、クラス(Movieclipを拡張する)でaddChild()を使用した場合のみです。私はしません すべてがチェックアウトされると混乱するだけなので、なぜ私のコードを提供するのかわかりません。おそらく、Movieclip を拡張するクラスの向きが Library MovieClips とは異なるように、どこかに変換があると思いますか?

このコードは bulletAdder() 関数内にあり、弾丸が bulletContainer で作成される唯一の場所です。

var localPlayer = Object(root).localSurvivor;

//Select what movieclip should go into the bullet
var newBullet;
    newBullet = new bullet1;

//Create a local movieclip for this
var newBulletMC:MovieClip = new MovieClip;
    newBulletMC.addChild(newBullet);
    newBulletMC.x = setX;
    newBulletMC.y = setY;
    //trace(localPlayer.rotation);

//Create the newBullet class for movement
var localPlayerRotation = Object(root).localSurvivor.rotation;
trace(localPlayerRotation);
var newBulletClass:bulletClass = new bulletClass(localPlayerRotation, bulletLifetime);

//Add bulletMC to the bulletClass
    newBulletClass.addChild(newBulletMC);

//Add to array
    bulletArray.push(newBulletClass);

//Add to stage
    localStage.addChild(newBulletClass);

これは、画面上を移動する弾丸である bulletClass です。

package  com{
        import flash.display.*
        import flash.utils.*

    public class bulletClass extends MovieClip{
            public var lifetime = 0;
            public var dir = 0;
                    var animationInt;
        public function bulletClass(playerRotation, bLifetime:Number = 1){
            dir = playerRotation
            //Start life
            animationInt = setInterval(animateBullet, 40);

        }

        private function animateBullet(){
            this.x += 10 * Math.sin(dir * (Math.PI / 180));
            this.y += 10 * Math.cos(dir * (Math.PI / 180));
        }

    }

}
4

1 に答える 1

1

それで、あなたはそれを整理したように見えますか?

私が提案することの1つは、このようなことをしているとき、ディスプレイリストを使用することが常に意味があるとは限りません. ステージ上で多くのことが起こっていると、パフォーマンスが遅くなり、パフォーマンスが大ざっぱになります。

ゲームを作成している場合は、少なくとも 1 つまたは 2 つの大きな Flash Game Framework をチェックアウトすることを強くお勧めします。彼らは舞台裏で多くの最適化を行い、ゲーム ロジックの多くでさえ抽象化されます。たとえば、Flixel をチェックしてください。非常に簡単に起動してすぐに実行でき、多くのチュートリアルが公開されています。

ほんの 2 セントです。お役に立てば幸いです。

于 2011-03-13T01:50:44.677 に答える