2012-02-16 13 views
0

XNAには2つのクラスがあります。XNAでクラスを取得してお互いに「話す」

maingame.csplayer.cs私maingame.csで

私はマウスがある場所に描画された矩形を持って、私はクリックするためにこれを使用しています。

私のplayer.csにはプレーヤーのスプライトの矩形があります。

私は問題はplayerRectangleがPlayer.CSにあり、mouseRectangleがあるということである

if (ButtonState.Pressed == mouseState.LeftButton && mouseRectangle.Intersects(playerRectangle)) 
      { 
       //draw something 
      } 

のようなものを持つことができるように、お互いにこの2つのクラス「話」を作るためにどのよう見当がつかないmaingame.CS

どのようにしてこれら2つを互いに話すことができますか?私は何時間もグーグルで運がありませんでした。

Player.CS私はMainGame.CSで私のマウスの矩形が

を行うことによって、それをクリックすることができるようにそれを作るしようとしている

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.Xna.Framework.Graphics; 
using Microsoft.Xna.Framework; 

namespace PlanetDefence 
{ 
    class Battleship 
{ 
//Textures 
Texture2D playerBattleshipTexture; 

//Rectangles 
Rectangle playerBattleshipRectangle; 

//Integers 

public Battleship(Texture2D newPlayerBattleshipTexture, Rectangle newPlayerBattleshipRectangle) 
{ 
    playerBattleshipTexture = newPlayerBattleshipTexture; 
    playerBattleshipRectangle = newPlayerBattleshipRectangle; 

    newPlayerBattleshipRectangle = new Rectangle(100, 100, 100, 100); 
} 

public void Update() 
{ 

} 

public void Draw(SpriteBatch spriteBatch) 
{ 
    //Draw the player Battleship 
    spriteBatch.Draw(playerBattleshipTexture, playerBattleshipRectangle, Color.White); 
} 

}

}

のように見えます

if (ButtonState.Pressed == mouseState.LeftButton && mouseRectangle.Intersects(playerBattleshipRectangle)) 
    { 
     playerBattleship.Draw(spriteBatch); 
    } 

答えて

1

一方のクラスは他方のクラスへの参照を保持する必要があります。

などを参照すると、それはそれでメソッドを呼び出すことができますが、プロパティの設定など

あなたは、コンストラクタやプロパティとしてインスタンスに渡すことによってこれを行うことができます。コンストラクタの外でそれにアクセスするには

public Maingame(Player player) 
{ 
    // use the Player instance 
} 

、あなたはフィールドを使用して(あなたが使用することを決定した方またはプロパティのセッター、)コンストラクタで、それを割り当てる必要があります。

Player myPlayer; 
public Maingame(Player player) 
{ 
    myPlayer = player; 
    // use the myPlayer field in the class 
} 

密結合を避けるために、 eventsを使用して調査したい場合があります。

+0

さて、リファレンスを正確に追加するにはどうすればよいですか? – Algalogica

+0

@Algalogica - 私は説明しました。 – Oded

+0

ありがとうございました。回答が編集されました。 – Algalogica

2

ここでは明白なことはわかりませんが、戦艦クラスの長方形のパブリックアクセサーが必要です。それが意味することを理解していなければ、オブジェクト指向プログラミングの基礎についていくつかの読書をする必要があります。今のところ、しかし、あなたはあなたがして使用してプレイヤオブジェクトに、あなたのmaingame.cs'参照からアクセスすることができます...

public Rectangle playerBattleshipRectangle; 

を言うためにあなたの戦艦クラスのコードを変更した場合

player.playerBattleshipRectangle 

(あなたのプレイヤーが戦艦クラスであると仮定します。そうでない場合は、あなたの質問にもっと明確にする必要があり、あなたのプレーヤーがどんなクラスでもクラスのソースコードを投稿する必要があります。あなたは "player.cs"と言っていますが、戦艦はポストしています - それは?ファイル名がplayer.csで、クラス名が実際に戦艦である場合は、それらが同じになるようにそれらの1つを変更する必要があります。クラスと変数の名前を理解しやすくするために練習しましょう。可能な限り記述的でなくてはなりません)。

デフォルトでは、クラスのメンバフィールドの前にスコープ修飾子(public、private、protected、internal ...)を含めないと、プライベートに設定され、他のクラスからアクセスできなくなります。

プロパティを使用して、クラスのメンバーフィールドへのアクセスをより詳細に制御することもできます。たとえば、

private int health; 
public int Health 
{ 
    get { return health; } 
    set { health = MathHelper.Clamp(health, 0, 100); } 
} 

このコードには、オブジェクトの正常性のプライベート(このクラスだけがアクセスできる)定義が含まれています。また、他のクラスがそのオブジェクトの健康状態を確認し、この状態を変更するための公開方法を提供します。 'set'セクションにあるように、別のクラスがこのオブジェクトの健全性を設定すると、自動的に0と100の間でクランプされます。また、 'set'を完全に省略することもできます。それ。

これはC#のオブジェクト指向プログラミングの基本です。あなたがそれらを知らないなら、あなたは基本から始めることを強くお勧めします。スコープ、プロパティ、継承、オブジェクトインスタンス、および参照を理解することなく、ゲームを正常に作成することはできません。

この記事からいくつかの関連の定義の簡単な要約:

  • フィールド - 変数別名。クラスに「メンバ」として格納されている基本的な特性。すなわち、「健康」または「バウンディングボックス」である。
  • プロパティ - フィールドのアクセサで、外部のクラスがそのクラスを表示および変更できる方法を定義するのに便利です。
  • インスタンス - メモリに格納されている「実際の」オブジェクト。クラスはオブジェクトの動作だけを定義します。オブジェクトが実際に存在するインスタンスにする必要があります。 Battleshipのようなクラスは、メモリ内の無数の戦艦のインスタンスを作成するために使用できます。あなたがBattleship player = new Battleship()と言うとき、あなたは 'player'というBattleshipのインスタンスを作成しています。
  • プライベート - フィールドの前に「プライベート」を配置すると、このクラスだけがそれを見ることができます。
  • public - フィールドの前に 'public'を配置すると、すべてのクラスがそれを見ることができます。
  • プロテクト - フィールドがこのクラスのみを意味する前に 'protected'を配置すると、このクラスから継承したすべてのクラスがそれを見ることができます。
  • internal - フィールドの前に 'internal'を配置すると、このクラスの名前空間のクラスだけがそれを見ることができます。

あなたの知識を過小評価すると謝罪します。

+0

ありがとうございました。 – Algalogica

+1

StackOverflowは、オブジェクト指向プログラミングの良い、しっかりした基盤の代わりになるものではありません。あなたのオブジェクトを話したり、構文や他のものにぶつかったりするのをやめようとしているのであれば、基本的に本を手に入れるか、オンラインチュートリアルに従うように十分にストレスを感じることはできません。 –

関連する問題