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