9

RPGツクールで作れるようなシンプルなゲームを作りたいです。現時点で主に探しているのは、XNA やその他の特定のライブラリを使用せずにそれを達成する方法を説明できるチュートリアルです。

理想的なのは、ステップバイステップのチュートリアルか、わかりやすい良い例です。

私の目標は、自分でそれを行い、相互に関連するアニメーション要素に関して全体的なプロセスがどのように機能するかを理解することです.

過去に簡単なチュートリアルを使用して簡単なヘビ ゲームを作成したことがありますが、そこには動きのアニメーションがなく、次に学びたいことは主にそれです。

編集:

これまでに見つけたチュートリアルはすべて、サードパーティのライブラリを使用しています。このリンクに出くわしましたが、XNA を含まないものを探しています。

4

3 に答える 3

16

説明しているトピックにアプローチするには、いくつかの方法があります。概要を少し説明してから、開始するための例を示すリソースを提供できれば幸いです。

基本的に、スプライトベースのアニメーションは一連の類似した画像を持つことを中心に展開し、連続して表示されるとパラパラ漫画のような動きの外観を作成します。

秘訣は、スプライトがいつ動いているか (したがって、アニメーション化する必要がある) と、いつ静止しているか (したがって、アニメーション化すべきでない) を理解することです。言い換えれば、あなたのゲームのキャラクターは、あなたが持っている間だけ動くはずだと仮定します▲</kbd>, ▶</kbd>, ▼</kbd> or , you need to detect when one of those keys starts and stops being pressed, so that you can start/stop your animation accordingly.

簡単にするために、スプライトが 2 つしかないことを想像してください。1 つ目 (左、下) は静止しているキャラクターを表し、2 つ目はステップの途中 (右、下) を表します。

マリオ

とき▶</kbd> button is not pressed, you simply continually display the first image. When the ▶</kbd> button is pressed, you toggle between the two every x milliseconds (depending on how fast you want the animation to appear).

アニメーション化された.gifは、一連の単純な画像フレームを含めることができる形式の 1 つであり、一連の画像として表示することを目的としています (したがって、アニメーションの錯覚を作成します)。この形式を使用してスプライトを作成する場合は、この SO ディスカッションにあるコードと同様のコードを使用できます。これは、C# を使用してアニメーション化された .gif をアニメーション化し、その開始/停止を制御する方法のサンプル コードを提供します。

別の方法として、スプライト ファイル (上記に含めたものなど) を使用する場合は、この CodeProject コードに似たものを使用できます。これは、スプライトの一部を抽出してペイントするために、Windows 環境との GDI の相互作用に焦点を当てています。ターゲット キャンバス。x(前述のように) ミリ秒ごとに再描画することで、同じ効果が得られます。

次の点に注意してください。

ゲーム環境の背景が透けて見えるように、スプライトの透明度を処理する必要があります (例として、上のマリオ スプライトは背景が透明です)。GDI を使用している場合 - これはすべて、描画メソッドの呼び出し方法に関係しています。アニメーション化された .gif を使用する場合 - 使用する方法は、ウィンドウでの表示方法によって異なります。

追加のリソース/例/参照については、次のリソースを確認してください。

スプライト開発の場合:

  • SpritePad - スプライト シートを作成するためのツール
  • http://makeagif.com/ - アニメーション GIF をオンラインで作成するためのツール
  • http://picasion.com/ - 別のアニメーション gif クリエイター
于 2013-04-23T22:22:35.363 に答える
4

私はあなたが求めていたものだと思うものの例をまとめました。この例は、ボタンまたはピクチャ ボックスに適用できます。私はシンプルさからこの方法を選びました。

アニメーションの各インスタンスは、タイマーと画像のリストを保持します。タイマーがイベントを発生させるたびに、ターゲット コントロールのイメージを更新します。

ここにプロジェクトファイルをアップロードしました。http://mcspazzy.com/code/ParTest.zip

うまくいけば、それで十分です。さらに説明が必要かどうか尋ねてください。

クラス

public class Animation
{
    readonly Timer _animtimer = new Timer();

    public List<Image> Frames;

    public int FrameIndex;

    private Button _target;
    private PictureBox _ptarget;

    public void Target(PictureBox target)
    {
        _ptarget = target;
    }

    public void Target(Button target)
    {
        _target = target;
    }

    public int FrameSpeed
    {
        get { return _animtimer.Interval; }
        set { _animtimer.Interval = value; }
    }

    public Animation()
    {
        Frames  = new List<Image>();
        _animtimer.Interval = 100;
        _animtimer.Tick += Update;
    }

    public void Play()
    {
        _animtimer.Start();
    }

    public void AddFrame(string file)
    {
        Frames.Add(Image.FromFile(file));
    }

    public void Stop()
    {
        _animtimer.Stop();
    }

    private void Update(object sender, EventArgs eventArgs)
    {
        FrameIndex++;

        if (FrameIndex == Frames.Count)
        {
            FrameIndex = 0;
        }
        _target.Image = Frames[FrameIndex];
        _ptarget.Image = Frames[FrameIndex];
    }

    public static implicit operator Image(Animation a)
    {
        return a.Frames[a.FrameIndex];
    }
}

これは私のフォームの読み込みにありました。初期化されているものはどこにでも行くことができます。

    private void Form1Load(object sender, EventArgs e)
    {

        _testAnim.AddFrame(@"F:\Im\Black.png");
        _testAnim.AddFrame(@"F:\Im\Blue.png");
        _testAnim.AddFrame(@"F:\Im\Green.png");
        _testAnim.AddFrame(@"F:\Im\Orange.png");
        _testAnim.AddFrame(@"F:\Im\Red.png");



        _testAnim.Target(ButtonTest);
        _testAnim.Target(PicBox);


        _testAnim.Play();


    }
于 2013-04-24T03:01:20.490 に答える