2

Actionscript 3.0のゲームのように、「Achtung!diekurve」を作成しようとしています。

これまでのところ、「ワーム」の1つを移動しましたが、問題なく動作します。

別のクラスファイルに分割したいのですが、動作させられないようです。.flaファイルと4つの.asファイルがあります。これまでのところ、私はこれらのうちの2つにしかコードがありません。すべてのコードを直接flaファイルに入れると、完全に正常に機能しますが、プレーヤークラスに入れると、ステージに「子を追加」しません。

これが私のplayer.asファイルです:http://pastebin.com/hZSxT9cu

addChildにコメントした理由は、mainFile.asでこれを実行したいからです。

これはメインファイルからのものです:http://pastebin.com/TAwUYrTU メインファイルでそれを呼び出す方法がよくわからないので、これが問題になると思います。

すべてのファイルに名前が付けられ、同じフォルダーに正しく配置されます。フラッシュは、各.asファイルが.flaファイルを対象としていることを示しているため、これは問題ではないようです。

どんな助けでも大歓迎です。

さらに、スプライトの速度を変更する方法を誰かが知っているなら、それは素晴らしいことです!これも機能しないようです。

よろしくジェスパー

4

1 に答える 1

1

参照しているゲームを見ると、衝突検出が必要になることは明らかです。ピクセルレベルの衝突検出に関するこのチュートリアルは、開始するのに役立つ場合があります。

現在の設定では、描画速度を上げる唯一の方法は、fla のフレーム レートを上げることです。

現在、プレーヤー インスタンスにアクセスできないため、メイン クラスにプレーヤー インスタンスを子として追加することはできません。実際、プレーヤー クラス内に複数のスプライトを作成するのは非常に非効率的です。より効率的な方法は、プレーヤー インスタンスのグラフィックス インスタンス内に直接四角形を描画することです。

以下は、あなたがやろうとしていることの良い出発点になると思います。繰り返しますが、私が何をしているのかを説明するためのコメントをいくつか含めました。

これを fla のドキュメント クラスとして設定します。

package  {

    import flash.display.MovieClip;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class MainTrink extends MovieClip {

        // define a list of players, their color, and controls
        // this should make it easier to vary the number of players
        private var players:Array = [
            {color: 0xff0000, left: Keyboard.A, right: Keyboard.S},
            {color: 0x0000ff, left: Keyboard.O, right: Keyboard.P},
            {color: 0x00ff00, left: Keyboard.NUMBER_1, right: Keyboard.NUMBER_2},
            {color: 0xffff00, left: Keyboard.LEFT, right: Keyboard.RIGHT},
        ];

        public function MainTrink() {

            var playerData:Object;
            var player:PlayerTrink;

            // Create a player instance for each player specified in the players array
            for (var i:int = 0; i < players.length; i ++) 
            {
                playerData = players[i];

                player = new PlayerTrink();
                player.color = playerData.color;
                player.init();

                this.addChild(player);

                // Add a reference to the instance back onto the players
                // list so that we can access it easily in other methods
                playerData.player = player;
            }

            // add listeners for keyboard events
            this.stage.addEventListener(KeyboardEvent.KEY_DOWN, _onKeyDown);
            this.stage.addEventListener(KeyboardEvent.KEY_UP, _onKeyUp);
        }

        private function _onKeyDown(event:KeyboardEvent):void
        {
            var playerData:Object;
            var player:PlayerTrink;

            // Check whether pressed key is a control for one of our players
            for (var i:int = 0; i < players.length; i ++)
            {
                playerData = players[i];
                player = PlayerTrink(playerData.player);

                if (event.keyCode == playerData.left)
                    player.leftKeyDown = true;

                if (event.keyCode == playerData.right)
                    player.rightKeyDown = true;
            }
        }

        private function _onKeyUp(event:KeyboardEvent):void
        {
            var playerData:Object;
            var player:PlayerTrink;

            for (var i:int = 0; i < players.length; i ++)
            {
                playerData = players[i];
                player = PlayerTrink(playerData.player);

                if (event.keyCode == playerData.left)
                    player.leftKeyDown = false;

                if (event.keyCode == playerData.right)
                    player.rightKeyDown = false;
            }
        }
    }

}

このファイルを fla と同じディレクトリに含めます。

    package  {

    // Need to import other classes referenced within this class
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.KeyboardEvent;
    import flash.events.Event;
    import flash.ui.Keyboard;

    // By convention classes are usually named using CamelCase
    public class PlayerTrink extends MovieClip {

        // Move your properties out of your class constructor
        private const TURNSPEED:Number = 0.1;

        private var posX:Number = 50;
        private var posY:Number = 50; 
        private var dirX:Number = 1;
        private var dirY:Number = 1;
        private var dir:Number = 0;

        private var _leftKeyDown:Boolean = false;
        private var _rightKeyDown:Boolean = false;

        private var _color:Number;

        public function PlayerTrink() {
            // constructor code
        }

        public function init():void
        {
            this.addEventListener(Event.ENTER_FRAME, _onEnterFrame);
        }

        private function _onEnterFrame(e:Event):void {
            if(_leftKeyDown) dir -= TURNSPEED;
            if(_rightKeyDown) dir += TURNSPEED;
            dirX = Math.cos(dir);
            dirY = Math.sin(dir);
            posX += dirX;
            posY += dirY;
            drawRect(posX, posY); 
        }

        private function drawRect(x:Number, y:Number):void {
            this.graphics.beginFill(_color);
            this.graphics.drawRect(x, y, 4, 4);
            this.graphics.endFill();
        }                           

        public function set leftKeyDown(value:Boolean):void 
        {
            _leftKeyDown = value;
        }

        public function set rightKeyDown(value:Boolean):void 
        {
            _rightKeyDown = value;
        }                   

        public function set color(value:Number):void 
        {
            _color = value;
        }        
    }   
}
于 2012-04-13T22:53:41.990 に答える