Component という基本クラスがあります。I2DComponent と I3DComponent の 2 つのインターフェイスもあります。現在、I2DComponent に取り組んでいます。
実装:
/// <summary>
/// Represtions a 2D object. These objects will be drawn after 3D objects,
/// and will have modifiers automatically provided in the editor.
/// </summary>
public interface I2DComponent
{
/// <summary>
/// Gets or sets the rectangle.
/// </summary>
/// <value>The rectangle.</value>
Rectangle Rectangle { get; set; }
/// <summary>
/// Gets the local position on the game screen.
/// </summary>
/// <value>The local position on the game screen.</value>
/// <remarks>The rectangle position minus the parent screen position.</remarks>
Rectangle LocalPosition { get; }
/// <summary>
/// Gets or sets the scale.
/// </summary>
/// <value>The scale.</value>
float Scale { get; set; }
}
問題は、マウスがその上にあるかどうかを確認するために、グローバル位置または Rectangle にアクセスする必要があることです。
if (component.Rectangle.Contains(mouse.Rectangle))
{
do somthing.
}
しかし、それを移動するためにアクセスしているときは、ローカル位置にアクセスしたいだけなので、位置 50、50 にゲーム画面がある場合、ローカル位置を 0、0 に設定でき、それが一番上になります親ゲーム画面の左隅。本当の問題は、誤ってRectangleを設定したくないということだと思います
component.Rectangle = new Rectangle(component.Rectangle.X + 5, component.Rectangle.Y + 5, component.Rectangle.Width, component.Rectangle.Height);
これは多かれ少なかれアクセサの設計上の問題であり、見た目を正しくしたいのですが、そうするのに苦労しています。
アップデート:
I2D コンポーネントが境界とスケールのみを持つように変更し、GameScreen にコンポーネントの現在の「グローバル」位置を取得する機能を持たせた場合はどうでしょうか。
アップデート:
これらの 2D オブジェクトはすべて、3D 空間にない hud または GUI オブジェクトとして描画されるオブジェクトです。ただの説明。
アップデート:
私は今、再帰的にそれを行うことを考えていますが、どうすればこれを行うことができるかわかりません。