C# 将XNA课程设置为';谈话';互相

C# 将XNA课程设置为';谈话';互相,c#,xna,C#,Xna,我在XNA有两门课 maingame.cs 和 player.cs 在mymaingame.cs中,无论鼠标在何处,我都会绘制一个矩形,我使用它来单击 Myplayer.cs为玩家精灵提供了一个矩形 我不知道如何让这两门课互相“交谈”,这样我就可以有类似的东西了 if (ButtonState.Pressed == mouseState.LeftButton && mouseRectangle.Intersects(playerRectangle)) {

我在XNA有两门课

maingame.csplayer.cs

在mymaingame.cs中,无论鼠标在何处,我都会绘制一个矩形,我使用它来单击

Myplayer.cs为玩家精灵提供了一个矩形

我不知道如何让这两门课互相“交谈”,这样我就可以有类似的东西了

if (ButtonState.Pressed == mouseState.LeftButton && mouseRectangle.Intersects(playerRectangle))
            {
                //draw something
            }
问题是playerRectangle在Player.CS中,mouseRectangle在main game.CS

我怎样才能让这两个人互相交谈?我已经在谷歌上搜索了好几个小时,运气不好

Player.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);
}
}

}

我正在努力使MainGame.CS中的鼠标矩形能够通过执行以下操作来单击它

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

其中一个类需要保存对另一个类的引用

有了这样一个引用,它可以调用它的方法,设置属性等

可以通过在构造函数中传递实例或作为属性来实现这一点

public Maingame(Player player)
{
  // use the Player instance
}
要在构造函数之外访问它,应使用字段并在构造函数(或属性设置器,以您决定使用的为准)中分配它:


为了避免紧密耦合,您可能需要研究使用。

其中一个类需要保存对另一个类的引用

有了这样一个引用,它可以调用它的方法,设置属性等

可以通过在构造函数中传递实例或作为属性来实现这一点

public Maingame(Player player)
{
  // use the Player instance
}
要在构造函数之外访问它,应使用字段并在构造函数(或属性设置器,以您决定使用的为准)中分配它:


为了避免紧密耦合,您可能需要研究使用。

我不确定我是否在这里说明明显的问题,但您的战舰类矩形需要一个公共访问器。如果您不理解这意味着什么,那么您需要阅读一些面向对象编程的基础知识。但是现在,如果你修改战舰类的代码

public Rectangle playerBattleshipRectangle;
。。。然后,您可以使用maingame.cs对玩家对象的引用来访问它

player.playerBattleshipRectangle
(假设你的玩家是战舰级。如果不是,那么你需要更清楚地回答你的问题,并为你的玩家发布任何级别的类源代码。你说“player.cs”但是发布类Battleship——到底是哪一个?如果文件名是player.cs,但类名实际上是Battleship,则应更改其中一个,使其相同。练习好的、易于理解的类和变量名;尽可能描述,不要太冗长)

默认情况下,如果在类中的成员字段之前不包含范围修饰符(public、private、protected、internal…),则它们将设置为private,并且其他类无法访问

您还可以使用属性来更好地控制对类成员字段的访问。比如说,

private int health;
public int Health
{
    get { return health; }
    set { health = MathHelper.Clamp(health, 0, 100); }
}
此代码包含对象运行状况的私有(只有该类可以访问)定义。它还为其他类“查看”该对象的运行状况并更改该运行状况提供了一种公共方式。正如您在“set”部分中所看到的,当另一个类设置此对象的运行状况时,它会自动钳制在0和100之间。您还可以完全省略“set”,其他类无法更改运行状况,它们只能看到它

这是C#中面向对象编程的所有基础知识。如果你不了解基础知识,我强烈建议你从基础开始。如果不了解范围、属性、继承、对象实例和引用(仅举几例),就无法成功创建游戏

本文中一些相关定义的快速总结:

  • 字段-又名变量;作为“成员”存储在类中的基本特征。i、 例如,“健康”或“边界框”
  • 属性-字段的访问器,用于定义外部类如何查看和修改字段
  • 实例-存储在内存中的“真实”对象。类只定义对象的行为;它必须成为一个实例,对象才能实际存在。像战列舰这样的类可以用来在内存中创建战列舰的无限实例。当你说战列舰玩家=新战列舰()时,你正在创建一个名为“玩家”的战列舰实例
  • private-将“private”放在字段之前意味着只有这个类可以看到它
  • public-将“public”放在字段之前意味着所有类都可以看到它
  • protected-将“protected”放在字段之前意味着只有该类以及从该类继承的任何类可以看到它
  • 内部-将“internal”放在字段之前意味着只有此类命名空间中的类才能看到它

如果我低估了你对这个主题的了解,我很抱歉。

我不确定我是否在这里说明了显而易见的问题,但是你的战舰级矩形需要一个公共访问器。如果您不理解这意味着什么,那么您需要阅读一些面向对象编程的基础知识。但是现在,如果你修改战舰类的代码

public Rectangle playerBattleshipRectangle;
。。。然后,您可以使用maingame.cs对玩家对象的引用来访问它

player.playerBattleshipRectangle
(假设你的玩家是战舰级。如果不是,那么你需要更清楚地回答你的问题,并为你的玩家发布任何级别的类源代码。你说“player.cs”但是发布类Battleship——到底是哪一个?如果文件名是player.cs,但类名实际上是Battleship,则应更改其中一个,使其相同。练习好的、易于理解的类和变量名;尽可能描述,不要太冗长)

默认情况下,如果在类中的成员字段之前不包含范围修饰符(public、private、protected、internal…),则它们将设置为private,并且其他类无法访问

您还可以使用属性来