0

所以我最近一直在使用 flixel,我想我对此有所了解,但我遇到了一个问题。

我有一个使用该loadMap()函数的 Map 类,效果很好。

然后我用setTileProperties()我在我的水瓦上使用,然后调用一个函数,在我的玩家类上调用一个布尔值(说他在水中),然后减慢他的速度。这仍然很有效,除了一件事。当我通过水砖上方或右侧(大约 10-16 像素,尚未得到确切数字)在瓷砖外面时,它仍然会减慢玩家的速度。我不确定这是否只是可行的方式FlxG.collide(),或者我是否可以做些什么来修复它,或者我是否应该找到另一种使用碰撞的方法。感谢所有帮助。

这是代码,如果您需要它:

地图.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 回答