这是我用来获取包含screenHeight
的变量的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Ball pall;
MinuPad playerPad;
public int screenWidth;
public int screenHeight;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
screenWidth = GraphicsDevice.Viewport.Width;
screenHeight = GraphicsDevice.Viewport.Height;
但我不能在不同的类中使用该变量。例如,我有一个名为Ball.cs
的班级,我还需要使用有关screenWidth
和screenHeight
的信息。
当我尝试使用相同的GraphicsDevice.Viewport.Width
时,它会给我:
An object reference is required for the non-static field, method, or property
'Microsoft.Xna.Framework.Graphics.GraphicsDevice.Viewport.get'
我的问题:为什么我不能在其他课程中使用GraphicsDevice.Viewport
?我该怎么做才能解决问题?
答案 0 :(得分:3)
您无法访问它的原因是因为Ball类的实例根本不知道Viewport。您可以通过几个选项解决这个问题,主要是将Viewport
传递给您的球的构造函数,例如:
public class Ball
{
Viewport viewport;
// ...
public Ball(int stuff, Viewport viewport)
{
this.viewport = viewport;
// ...
}
}
在Game1
类中创建一个球的实例,其中包含以下内容:
Ball ball = new Ball(42, GraphicsDevice.Viewport);
然后,您可以在Ball.cs中单独执行viewport.Height
。
如果你想要一些更全局的东西,以便你可以在任何地方使用高度/宽度 那么你可以在Game1(public static Viewport
)中创建一个静态视口并设置Viewport
in Initialise()
/ LoadContent()
方法;你可以通过Game1.Viewport
访问它。就个人而言,我不喜欢这种方式,因为它似乎是“hacker-ish”,但它完成了工作......虽然说,我通常在我的游戏类中有一个静态随机类:)!
答案 1 :(得分:0)
我不是100%熟悉C#,但我认为你错过了顶部的导入声明。
尝试包含以下行:
using Microsoft.Xna.Framework.Graphics
...位于Ball.cs
的顶部。
我猜测如果检查主文件,你会在文件顶部看到该行(和类似的行)。
如果您检查GraphicsDevice
的{{3}},则会看到它位于Microsoft.Xna.Framework.Graphics
命名空间中。
答案 2 :(得分:0)
我不熟悉XNA,但我的猜测是GraphicsDevice
是基类Microsoft.Xna.Framework.Game
的成员。您将无法从不是Game
。
同样,不熟悉XNA,但如果您的Ball
类可以访问Game1
类的实例,那么它应该能够访问screenWidth
字段:
public class Ball
{
Game1 _game;
public Ball(Game1 game){_game = game;}
private void UseScreenWidth(){
// Do something with _game.screenWidth;
}
}