私は最終的に正しい方法で画面上に描画されたタイルを得ることができました。場所はちょっと離れていますが、私は理由を理解できないようですが...タイルが間違った場所に描画されています
私は描画にSFMLを使用しています。
Tile.hpp:
#ifndef TILE_HPP
#define TILE_HPP
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include "textureManager.hpp"
class Tile {
public:
Tile();
Tile(sf::Vector2i coord, int biome);
~Tile();
sf::Vector2i getCoord() const { return coord; };
int getBiome() const { return biome; };
void setCoord(sf::Vector2i coord) { this->coord = coord; };
void setBiome(int biome) { this->biome = biome; };
void draw(int x, int y, sf::RenderWindow* rw);
void update(sf::Texture& texture);
private:
sf::Vector2i coord;
int biome;
sf::Sprite sprite;
};
#endif
Tile.cpp
今より関連部分:
void StatePlay::draw(const float dt)
{
game->window.setView(view);
game->window.clear(sf::Color::Black);
sf::Vector2f offset = camera.getLocation();
int newX = (offset.x/map.getTileSize()) - (map.chunkSize/2);
int newY = (offset.y/map.getTileSize()) - (map.chunkSize/2);
for (int x = 0; x < map.chunkSize; x++)
{
for (int y = 0; y < map.chunkSize; y++)
{
Tile tile = map.getTile(newX + x, newY + y);
tile.draw((newX + x) * map.getTileSize(), (newY + y) * map.getTileSize(), &game->window);
}
}
return;
}
StatePlay::StatePlay(Game* game)
{
this->game = game;
sf::Vector2f pos = sf::Vector2f(game->window.getSize()); // 1366x768
view.setSize(pos);
pos *= 0.5f; // 688x384
view.setCenter(pos);
// Initialize map
map.init(game->gameTime, game->textureManager.getImage("tileset.png"));
float w = (float) map.getWidth(); // 500
float h = (float) map.getHeight(); // 500
w *= 0.5f; // 250
h *= 0.5f; // 250
w *= map.getTileSize(); // 250 * 32 = 8000
h *= map.getTileSize(); // 250 * 32 = 8000
// Move camera
// Uses view::move from sfml to move the view with w and h
// Also sets camera private to w and h values, return with camera::getLocation()
camera.setLocation(&view, sf::Vector2f(w, h));
}
を描画結果は私だけ〜10を参照してくださいということです私の画面の左下隅にあるタイルの四角形は、約3/4を覆っています。画面に収まる限り、(X 32PXそれぞれ)のタイルを
適切なタイルが選択されていますが、ドロー場所は、それは64×64の中心を描く必要があります...間違っています。
newXとnewYとは何ですか? あなたのスプライトで何を描こうとしていますか、位置を決めています...テクスチャも色もありません。そして、間違っていることだけを書き留めてください。 –
それはあまりにも多くのコードだったので、私はそれを残しました。ステップバイステップのプロセス: 'map'は' StatePlay'コンストラクタで初期化され、デフォルトの500x500タイルマップを生成します。次に、カメラはこの中心に設定されます。 (250×タイルサイズ)。これは 'sf :: View :: move'を使用し、カメラクラス内のプライベート場所を更新します。 'StatePlay :: draw'では、xとyを
nepp95
最初にデフォルトビューで試してみましたか? –