現在ゲームをしています。それは、2Dタイルベースのゲームです。私はあなたが水を踏んだときに、プレイヤーのスピードとサイズが変わるようにしました。浮動小数点数を使ってlibGDXのセルからタイルの位置を取得するにはどうすればよいですか?
私はこの第二のあらゆる第60回実行しています:
if(map.getTileTypeByCoordinate(0, player.sprite.getX()/4.0f, player.sprite.getY()/4.0f) == TileType.WATER){
player.sprite.setScale(2, 1.75f);
player.speed = 3;
} else {
player.sprite.setScale(2, 2);
player.speed = 5;
}
map.getTileTypeByCoordinate(int layer, float x, float y);
方法は以下の通りです:
public TileType getTileTypeByCoordinate(int layer, float col, float row) {
Cell cell = ((TiledMapTileLayer) tiledMap.getLayers().get(layer)).getCell((int)(col), (int)(row));
if(cell != null){
TiledMapTile tile = cell.getTile();
if(tile != null){
int id = tile.getId();
return TileType.getTileTypeById(id);
}
}
return TileType.GRASS;
}
私は整数にCOLと行をキャストしていない場合は、私が手を明らかにエラーです。
私がBox2Dを使用して衝突をチェックしているため、これが問題である理由があります。私はスケール(10.0f
)ですべてを分けるので、物理シミュレーションはより正確で、プレイヤーをより速く動かすことができます。
int位置ではなくfloat位置からタイルを取得する方法があるのだろうかと思っていました。衝突検出にBox2Dの使用を止めなければなりませんか?私はこれで問題ないですが、私自身の衝突検知をプログラミングすることはあまりよくありません。もしそうなら、どうすれば自分のものを作ることができますか?
これは動作していないようでした、私はこれは私のコードであることに注意するのを忘れ: 'tiledMapRenderer =新しいOrthogonalTiledMapRenderer(/ Main.scale 4F tiledMap、);' – xBegin
私はこれにif文を変更: '場合(map.getTileTypeByCoordinate(0、(player.sprite.getX()*(Main.scale)* 1.0f)、player.sprite.getY()*(Main.scale)* 1.0f)== TileType.WATER){ ' – xBegin
また、これは箱を作るために完全に動作します: ' if(!getTileTypeByCoordinate(layer、(int)(x *(16/Main.scale))、(int)(y *(16/Main.scale) ))。isCollidable()){ //タイルのボディを作成 } – xBegin