FlxG.collide(使用 setTileProperties)在 flixel 中的图块 space 外发生碰撞
FlxG.collide (with setTileProperties) colliding outside the tile space in flixel
所以我最近一直在使用 flixel,我想我对它有了一些感觉,但是我遇到了一个问题。
我有一个地图 class,它使用 loadMap()
函数,效果很好。
然后我在我的 Water 瓷砖上使用 setTileProperties()
,然后调用一个函数,在我的玩家 class 上调用一个布尔值(表示他在水中),然后减慢他的速度下。这仍然很好用,除了一件事。当我在水砖上方或右侧(大约 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");
}
所以,我已经为所有想知道的人找到了答案。
我使用 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;
}
}
}
这个方法太简单了,让我觉得卡在上面有点傻,但是如果有人找到更有效的方法,请继续评论,或者提出新的答案。我总是很感激反馈。
所以我最近一直在使用 flixel,我想我对它有了一些感觉,但是我遇到了一个问题。
我有一个地图 class,它使用 loadMap()
函数,效果很好。
然后我在我的 Water 瓷砖上使用 setTileProperties()
,然后调用一个函数,在我的玩家 class 上调用一个布尔值(表示他在水中),然后减慢他的速度下。这仍然很好用,除了一件事。当我在水砖上方或右侧(大约 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");
}
所以,我已经为所有想知道的人找到了答案。
我使用 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;
}
}
}
这个方法太简单了,让我觉得卡在上面有点傻,但是如果有人找到更有效的方法,请继续评论,或者提出新的答案。我总是很感激反馈。