1

アルファベットからの文字のカスタムビルドされた.PNGファイルを使用して、ゲームに見栄えの良いテキストグラフィックを提供しようとしています。ただし、WinFormsゲームのコア機能は最小限のグラフィックスを使用して機能するため(ユーザーがすでに試した単語を入力すると、「推測」という単語をフェードアウトする小さなアニメーションルーチンを起動するようにタイマーが設定されています。これは実行されます。 DrawString()を使用)。今、私は仕事に取り掛かろうとしていますDrawImage(Image, dstRect, srcRect, Unit)、そして私はそれをフォームロードで実行するように設定しています。

    private void DrawLetters()
    {

        // Create image.
        Graphics letters = this.CreateGraphics();
        Image newImage = Image.FromFile(strPath + "Letter_Map.png");

        // Create rectangle for displaying image.
        Rectangle destRect = new Rectangle(25, 25, 80, 80);

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

        // Draw image to screen.
        letters.DrawImage(newImage, destRect, srcRect, units);
    }

これは、MSDNサイトから実質的に逐語的です。私のフォームには、ゲームに必要な文字のグリッドをユーザーに表示するために、ラベルの配列が入力されています。カスタム長方形を上書きするのは描画されているのですか?最終的にはすべて画像に置き換えたいと思います。srcRectは(x、y、幅、高さ)であると理解しているので、「スプライトシート」のフルサイズを指定しました。dstRectの場合、25x、25y前後から始まるフォームに80x80pxのブロックを配置するだけです。

そのために、空白のフォームを作成し、DrawLetters()そのフォームの読み込みイベント中に関数を呼び出しました(関数をそのフォームのコードにコピーしました)。でも何も見えなかったので少し戸惑い始めました。画面に描画されるフォームやコントロールと組み合わせて描画がどのように機能するかについて、ある程度の教育が必要になる場合があります。

このhttps://stackoverflow.com/questions/837423/render-a-section-of-an-image-to-a-bitmap-c-sharp-winformsを編集して、最初に私を動かしましたが、このユーザーは機能していますXNAの知識があり、それをWinFormsと組み合わせようとしているようです。XNAは、私が「かなり上手く」しようとしている単純なテキストゲームにとってはやり過ぎだと私は信じています。

4

1 に答える 1

2

フォームのOnPaintMethodをオーバーライドして、フォームに画像を表示するために使用できるフォームのグラフィックスオブジェクトにアクセスする必要があります。

画像の一部を表示する場合は、次のように、DrawImageの別のオーバーロードを使用する必要があります。

public partial class DrawImageDemo : Form
{
    public DrawImageDemo()
    {
        InitializeComponent();
    }

    private Image _sprites;
    public Image Sprites
    {
        get
        {
            if (_sprites == null)
            {
                _sprites = Image.FromFile("test.jpg");
            }
            return _sprites;
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        // The forms graphics object
        Graphics g = e.Graphics;

        // Portion of original image to display
        Rectangle region = new Rectangle(0, 0, 80, 80);

        g.DrawImage(Sprites, 25, 25, region, GraphicsUnit.Pixel);

        base.OnPaint(e);
    }

}
于 2012-12-04T19:38:02.153 に答える