2017-10-28 7 views
1

現在ゲームをしています。それは、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の使用を止めなければなりませんか?私はこれで問題ないですが、私自身の衝突検知をプログラミングすることはあまりよくありません。もしそうなら、どうすれば自分のものを作ることができますか?

答えて

1

スケールを使用してBox2Dを使用している場合、座標をスケールアップする必要があります。

スプライトがピクセル100の場合、box2dの座標は10mです。タイルはピクセル単位で座標を求めているので、スケールを掛けるだけです。もちろん

player.sprite.getX() * scale

規模といくつかの鋳造があるかもしれません。

ご質問がありましたら、お手数ではありがとうございます。

+0

これは動作していないようでした、私はこれは私のコードであることに注意するのを忘れ: 'tiledMapRenderer =新しいOrthogonalTiledMapRenderer(/ Main.scale 4F tiledMap、);' – xBegin

+0

私はこれにif文を変更: '場合(map.getTileTypeByCoordinate(0、(player.sprite.getX()*(Main.scale)* 1.0f)、player.sprite.getY()*(Main.scale)* 1.0f)== TileType.WATER){ ' – xBegin

+0

また、これは箱を作るために完全に動作します: ' if(!getTileTypeByCoordinate(layer、(int)(x *(16/Main.scale))、(int)(y *(16/Main.scale) ))。isCollidable()){ //タイルのボディを作成 } – xBegin

関連する問題