0

さて、タイルセットを保持する画像があります。次に、PictureBox を「ゲーム画面」として使用します。コードで行うことは、タイル セット (タイル) のスニペットを取得し、それをゲーム画面に配置することだけです。

これが私のコードです。

private void picMap_Click(object sender, EventArgs e)
        {

            //screenMain = picMap.CreateGraphics();

            // Create image.
            //gfxTiles = Image.FromFile(@Program.resourceMapFilePath + "poatiles.png");

            // Create coordinates for upper-left corner of image. 
            int x = 0;
            int y = 0;

            // Create rectangle for source image.
            Rectangle srcRect = new Rectangle(16, 16, 16, 16);
            GraphicsUnit units = GraphicsUnit.Pixel;

            // Draw image to screen.
            screenMain.DrawImage(gfxTiles, x, y, srcRect, units);
            screenMain.DrawImage(gfxTiles, 16, 0, srcRect, units);
            screenMain.DrawImage(gfxTiles, 32, 0, srcRect, units);
            screenMain.DrawImage(gfxTiles, 16, 16, srcRect, units);
        }

そして、ここに私の出力があります:http://tm14.net/pokestory/mapeditor_test.png

各「タイル」の間にそのスペースがある理由は何ですか (2 ピクセルのギャップです)。コードをゲットーリグすることもできますが、代数を使用してタイルをどこに移動する必要があるかなどをプログラムで把握する予定なので、ゲットーリグは機能しますが、ゲーム全体でそれを行うのは面倒で、少なくとも、ずさんな。

4

2 に答える 2

0

DrawImage の呼び出しは問題ないと思います。投稿した画像では、16x16 のタイルが隣り合っているように見えます。potiles.png を確認します。その中の Rectangle(16, 16, 16, 16) に何があるかわかりません。それはあなたが思うものではないかもしれません。

編集:何を言うべきかわかりません。私はほぼ poatiles のサイズの png を作成し、16x16 の正方形を 16,16 に配置しましたが、期待どおりに描画されました。

コードは問題ないように見えます。小さな画像でも機能するため、私が考えることができる唯一のことは、ポアタイルに問題があるということです。

Graphics.DrawImage Method (Image, Int32, Int32, Rectangle, GraphicsUnit) について MSDN に次のコメントがあります。

このメソッドは、物理的なサイズを使用してイメージの一部を描画するため、ディスプレイ デバイスの解像度 (インチあたりのドット数) に関係なく、イメージの部分はインチ単位で正しいサイズになります。たとえば、画像部分の幅が 216 ピクセルで、水平解像度が 72 dpi であるとします。このメソッドを呼び出して、解像度が 96 dpi のデバイスでそのイメージ部分を描画すると、レンダリングされたイメージ部分のピクセル幅は (216/72)*96 = 288 になります。

単位としてピクセルを指定しているので、それを無視すると思います。しかし、より良いアイデアがない場合は、ポアタイルの dpi と小さい画像を比較することをお勧めします。(Image.Horizo​​ntalResolution & Image.VerticalResolution)

于 2013-11-18T07:35:33.403 に答える
0

最初からすべての情報が揃っているかどうかはわかりませんが、これまでに行ったことを見て、いくつかの提案がありました。

1) potiles.png をチェックして、周囲に黒いピクセルがない 16x16 ピクセルの画像であることを確認します。

2) Rectangle のコンストラクターに 4 つの int があるのは奇妙に思えます。通常、長方形は幅と高さのみを持つ必要があります (辺の長さが異なる場合、それは真の長方形ではありません!)

3) 描画しようとしている Rectangle の幅と高さを乗算し、その値を原点 (0,0) に加算して、画面上の位置を決定することができます。

于 2013-11-18T07:41:16.080 に答える