0

だから私は最近 flixel をいくつか使っていて、その感覚をつかんでいると思いますが、問題に遭遇しました。

関数を使用する Map クラスがありloadMap()ますが、これは素晴らしい結果です。

次に、Water タイルで を使用setTileProperties()して、関数を呼び出し、プレイヤー クラスで Boolean を呼び出して (彼が水中にいることを伝えます)、それによって彼の速度が低下します。1 つのことを除いて、これはまだうまく機能します。水のタイルをタイルの上または右 (約 10 ~ 16 ピクセル、正確な数は得られていません) に渡すと、それでもプレイヤーの速度が低下します。これがFlxG.collide()機能する方法なのか、それを修正するために何かできることがあるのか​​、衝突を使用する別の方法を見つける必要があるのか​​ どうかはわかりません。すべての助けに感謝します。

必要な場合のコードは次のとおりです。

Map.as

   private function createMap():void {
            loadMap(new currentMap, currentTiles, 32, 32, 0, 0, 0);
            setTileProperties(4, FlxObject.NONE, PlayerInWater);                
        }
override public function update():void {
        super.update();
        FlxG.collide(Registry.player, this);

    }

    private function PlayerInWater(tile:FlxTile, player:Player):void {
        Registry.player.inWater = true;
        trace("player is in the water"); 

    }
4

1 に答える 1

0

それで、知りたい皆さんのために、私はこれに対する答えを見つけました。私はoverlapsPoint()これを作成するためにメソッドを使用しました:

private function createMap():void {
        //load Map
        loadMap(new currentMap, currentTiles, 32, 32, 0, 0, 0);
        //set water tiles
        setTileProperties(4, FlxObject.NONE);
        //put all of the water tiles in an array
        waterArray = getTileCoords(4);
    }

override public function update():void {
        super.update();
        //collision with map
        FlxG.collide(Registry.player, this);
        //loops through each water tile
        for each(var waterTile:FlxPoint in waterArray) {
            //checks if the player is overlapping the water tile
            if (Registry.player.overlapsPoint(waterTile)) {
                //if so, then the player is in water
                Registry.player.inWater = true;
            }
        }
    }

この方法は非常に単純なので、行き詰まるのはちょっとばかげているように感じますが、誰かがより効率的な方法を見つけたら、先に進んでコメントするか、新しい答えを出してください. いつもフィードバックに感謝しています。

于 2015-01-24T16:24:28.743 に答える