2

私はWPFとC#を使用していて、その上に長方形のあるキャンバスがあります(迷路のように)。今、私はこの迷路の中を(アルゴリズムの助けを借りて)動くキャラクターを作りたいと思っています。したがって、characterという新しいクラスを作成しましたが、問題はここから始まります。画像、位置を持ち、character-classからメソッドと属性にアクセスできるオブジェクトをキャンバス上に作成するにはどうすればよいですか?したがって、最終的なものは次のようになります。

private class MainWindow
{

   //Here the canvas is made visible and the rectangles are being drawn on the canvas

   //Then a method should start to create the character and move him through the maze

   //it should look like (character.move(1) so the character moves one step forward etc.)

}

private class Character
{
//here are the methods and attributes the character should have
}

事前に感謝し、私の悪い英語をお詫びします:)

4

2 に答える 2

3

問題を反対方向から見ると、はるかに簡単に解決できます。

キャラクターオブジェクトを作成し、それを接続して、データ(モデル)で期待どおりにすべてが機能するようにします。次に、キャラクターの場所を表すプロパティを追加する必要があります。

public int XCoordinate { get; set; }
public int YCoordinate { get; set; }

移動がモデル側で行われていることを確認してください。視覚的な表示に基づいて動きを駆動しようとすると、プログラムが複雑になりすぎます。

次に、キャンバス内のキャラクターのビューを次のように定義します。

<Canvas ...>
    <Image Canvas.Left="{Binding XCoordinate}" Canvas.Top="{Binding YCoordinate}" .../>
</Canvas>

最後に、バインディング構文が正しいことを確認し(DataContextを設定しましたか?)、NotifyPropertyChangedを好みに合わせて設定してください(これらは両方とも他の場所で十分にカバーされています)。次に、きちんと分割されたモデルとビューが設定され、移動ロジックやその他の必要なものに集中するのがはるかに簡単になります。

于 2012-11-02T20:58:11.887 に答える
1

Character最初のステップは、クラスのプロパティとメソッドを定義することです。これには(質問で示したように)Move(Position newPosition)メソッドが含まれます。構造Positionのラッパーにすることができます。クラスには、キャラクターが存在するCanvasへの参照も含まれている必要があります。'character.Move(position)`を呼び出すと、キャラクターが現在関連付けられているキャンバス内でキャラクターを移動できるため、これが必要です。PointCharacter

さらに、にはMainWindow、文字または文字のコレクションへの参照を含めることができます(複数の文字が必要な場合)。実際の作成は、の初期化中に行うことも、遅延MainWindowすることもできます。初期化後、アルゴリズムは文字インスタンスで機能します。

于 2012-11-02T23:14:28.480 に答える