- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习使用 modevelop 和 monogame 在 C# 中编程。我对 C 和 Java 相当熟悉,但老实说,我仍在学习像面向对象的程序员一样思考。我想使用下面的类来收集 Sprite 的相关属性,以及移动、绘制、加速、检测碰撞等方法来整理游戏代码。此类出现在文件 SpriteObject.cs 中,并且编译时没有错误。
namespace MyFirstGame
{
class SpriteObject
{
private Texture2D Texture;
private Vector2 Position;
private Vector2 Velocity;
public SpriteObject(Texture2D texture, Vector2 position)
{
this.Texture = texture;
this.Position = position;
this.Velocity = Vector2.Zero;
}
public SpriteObject(Texture2D texture, Vector2 position, Vector2 velocity)
{
this.Texture = texture;
this.Position = position;
this.Velocity = velocity;
}
public Rectangle BoundingBox
{
get
{
return new Rectangle(
(int)Position.X,
(int)Position.Y,
Texture.Width,
Texture.Height);
}
}
public void Move(SpriteObject sprite)
{
this.Position += this.Velocity;
}
public void BounceX(SpriteObject sprite)
{
this.Velocity.X *= -1;
}
public void BounceY(SpriteObject sprite)
{
this.Velocity.Y *= -1;
}
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(Texture, Position, Color.White);
}
}
}
我正在尝试在下面的代码中使用此类(这是我正在尝试清理的不整洁但正在运行的代码和我正在尝试使用的新类的混合体) .请特别注意标有 A> 和 B> 的行。
namespace MyFirstGame
{
/// <summary>
/// This is the main type for your game
/// </summary>
public class Game1 : Game
{
GraphicsDeviceManager graphics; // All default to private
KeyboardState oldKeyState;
SpriteBatch spriteBatch;
Boolean gameOn=true;
A> SpriteObject ballSprite, starSprite; // A couple of sprites...
Texture2D texStar, texBall; // This is a texture we can render.
public Game1()
{
graphics = new GraphicsDeviceManager(this);
graphics.PreferredBackBufferHeight = 900-32; // Force window size or it won't work...
graphics.PreferredBackBufferWidth = 1600; // Force window size
Content.RootDirectory = "Content";
graphics.IsFullScreen = true;
}
/// <summary>
/// Allows the game to perform any initialization it needs to before starting to run.
/// This is where it can query for any required services and load any non-graphic
/// related content. Calling base.Initialize will enumerate through any components
/// and initialize them as well.
/// </summary>
protected override void Initialize()
{
// TODO: Add your initialization logic here
oldKeyState = Keyboard.GetState();
base.Initialize();
}
/// <summary>
/// LoadContent will be called once per game and is the place to load
/// all of your content.
/// </summary>
// Set the coordinates to draw the sprite at.
Vector2 starPosition = Vector2.Zero;
Vector2 ballPosition = new Vector2(200, 0);
// Store some information about the sprite's motion.
Vector2 starSpeed = new Vector2(10.0f, 10.0f);
Vector2 ballSpeed = new Vector2(10.0f, 0.0f);
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
texStar = Content.Load<Texture2D>("star");
texBall = Content.Load<Texture2D>("ball");
B> ballSprite = new SpriteObject(texBall, Vector2(200, 0), Vector2(10.0f, 0.0f)); // create two sprites
B> starSprite = new SpriteObject(texStar, Vector2.Zero, Vector2(10.0f, 10.0f));
}
/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
// Move the sprite by speed.
KeyboardState newKeyState = Keyboard.GetState();
if (newKeyState.IsKeyDown(Keys.Escape))
Exit();
if (collisionDetected()) gameOn = false; // If there's a collision then no movement.
//Could do with putting this in a seperate method or class, if there isn't one already...
if (gameOn)
{
if (newKeyState.IsKeyDown(Keys.PageUp) && oldKeyState.IsKeyUp(Keys.PageUp))
{
starSpeed.X *= 1.1f;
starSpeed.Y *= 1.1f;
}
else if (newKeyState.IsKeyDown(Keys.PageDown) && oldKeyState.IsKeyUp(Keys.PageDown))
{
starSpeed.X *= 0.9f;
starSpeed.Y *= 0.9f;
}
else if (newKeyState.IsKeyDown(Keys.Up) && oldKeyState.IsKeyUp(Keys.Up))
{
starSpeed.Y += 1.0f;
}
else if (newKeyState.IsKeyDown(Keys.Down) && oldKeyState.IsKeyUp(Keys.Down))
{
starSpeed.Y -= 1.0f;
}
else if (newKeyState.IsKeyDown(Keys.Left) && oldKeyState.IsKeyUp(Keys.Left))
{
starSpeed.X -= 1.0f;
}
else if (newKeyState.IsKeyDown(Keys.Right) && oldKeyState.IsKeyUp(Keys.Right))
{
starSpeed.X += 1.0f;
}
oldKeyState = newKeyState;
starPosition += starSpeed;
ballPosition += ballSpeed;
int MaxX =
graphics.GraphicsDevice.Viewport.Width - texStar.Width;
int MinX = 0;
int MaxY =
graphics.GraphicsDevice.Viewport.Height - texStar.Height;
int MinY = 0;
// Check for ball bounce
if (ballPosition.X > MaxX)
{
ballPosition.X = MaxX;
ballSpeed.X *= -1;
}
if (ballPosition.X < MinX)
{
ballPosition.X = MinX;
ballSpeed.X *= -1;
}
if (ballPosition.Y > MaxY)
{
ballSpeed.Y *= -1;
ballPosition.Y = MaxY;
}
ballSpeed.Y += 1;
// Check for bounce.
if (starPosition.X > MaxX)
{
starSpeed.X *= -1;
starPosition.X = MaxX;
}
else if (starPosition.X < MinX)
{
starSpeed.X *= -1;
starPosition.X = MinX;
}
if (starPosition.Y > MaxY)
{
starSpeed.Y *= -1;
starPosition.Y = MaxY;
}
else if (starPosition.Y < MinY)
{
starSpeed.Y *= -1;
starPosition.Y = MinY;
}
}
else
{
starSpeed=Vector2.Zero;
ballSpeed=Vector2.Zero;
}
}
private Boolean collisionDetected()
{
if (((Math.Abs(starPosition.X - ballPosition.X) < texStar.Width) && (Math.Abs(starPosition.Y - ballPosition.Y) < texBall.Height)))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// Draw the sprite.
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
spriteBatch.Draw(texStar, starPosition, Color.White);
spriteBatch.Draw(texBall, ballPosition, Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
}
}
A> 标记新的 SpriteObject ballSprite, starSprite;
声明没有任何问题。
B> 标记在我尝试使用 SpriteObject 构造函数创建并为我之前声明的 SpriteObjects 赋值时出现的错误 - 错误如帖子标题所示。第一行有两个,第二行有一个。
namespace 暗示了我的 C# 经验水平。如果您能帮助我理解我几乎可以肯定的基本错误,我将不胜感激。
最佳答案
您指出的那两行代码缺少 'new' operator ,这是实例化 Vector2
(或任何)类所必需的。
ballSprite = new SpriteObject(texBall, new Vector2(200, 0), new Vector2(10.0f, 0.0f));
starSprite = new SpriteObject(texStar, Vector2.Zero, new Vector2(10.0f, 10.0f));
关于c# - 表达式表示 `type' ,其中应为 `variable' 、 `value' 或 `method group' (CS0119) (MyFirstGame),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28709799/
我正在尝试做一个简单的For根据文档 https://msdn.microsoft.com/en-us/library/5z06z1kb.aspx 在 VBA 中循环 但是,我在这一行得到一个错误:
嗨,我有以下代码尝试使其正常运行,我一直在获取速度不允许的类型名称,并且在.x左右获取(),基本上我想做的是读取“速度”中的3 D3DXVECTOR3值。我已经提高了结构速度,并通过了成员,它无法正常
我正在尝试为 Project Euler 中的问题 6 编写一个 Rubyish 解决方案,因为我有用其他语言编写 C 的倾向。但是,这段代码: sqrsum, sumsqr = 0, 0 (1..1
我只是想传递一些值,但它一直在抛出错误。有人可以纠正我在这里缺少的东西吗? 这里有错误 Thread t_PerthOut = new Thread(new ThreadStart(ReadCentr
这个问题在这里已经有了答案: Why does passing $null to a parameter with AllowNull() result in an error? (3 个回答) 5年
我有这段java代码。我是java菜鸟.. 错误: expected cfg = new Config; 代码: import java.sql.Connection; import java.sq
我不明白为什么我会收到此错误,因为我的多维数组应该可以正常运行,但由于列出的错误,它在这种情况下无法正常工作...我非常沮丧。 错误是:[] 中的索引数量错误;预期 2 这是我的: publi
我正在尝试将 errorBody 转换为我的 RegistrationResponse 但它总是抛出一个 Expected BEGIN_ARRAY but was BEGIN_OBJECT 注册响应
众所周知 actor should be assigned the smallest task possible 但是最小的任务是什么? 例如,我们有一些发送电子邮件的代码。这是一堆类(class)。
我在使用 web 服务的 android 中遇到这个错误。 当我运行 android webservice 并运行 android 项目时会发生这种情况 那么这里有什么问题呢? 请问有人知道吗? 谢谢
我是初学者,我正在我的应用中使用 Retrofit 2。我有这个 JSON。 (我尝试了很多解决方案,但对我没有任何帮助)。感谢您的帮助 我遇到的错误:应为 BEGIN_ARRAY 但在第 1 行第
我收到这个 json 作为来自休息服务器的响应: { "externalOrderId":"5cb9bc46-aaa3-43ff-bb1a-6b17443f63ea", "shortId
我的XML有点使用rust ,但是我试图用XML创建一个基于本地天气网络的api。但是还没有完成,但是在测试时遇到了错误,这是 error on line 3 at column 16: AttVal
各位 Scala 开发人员大家好, 有人可以向我解释一下以下代码中的类型推断有什么问题以及如何修复它。 以下代码是使用 Scala 2.10.2 的 Play 2.2 的自定义操作 class Tes
如何使用 Retrofit 解析此内容?我收到错误 BEGIN_OBJECT but was BEGIN_ARRAY Json 如下,它包含一个结果数组对象,该对象有一个为 null 的数组对象和信息
因此,我尝试在 switch 函数中调用主函数中的函数,它告诉我“函数样式或类型构造需要 '('”。我在这里做错了什么导致此错误?我可以似乎不明白。谢谢。 #include #include #d
大家好,提前致谢。我正在尝试用 C 语言编写一个用于高斯-勒让德求积(积分的数值方法)的函数,我必须将其应用于 2 种情况,一种情况的间隔被转换为 [-1,1],另一种情况的间隔已再次划分分为四个部分
我已经阅读了很多有关此错误的答案,但没有找到适合我的解决方案,也许类对象不相同 我的错误是: com.google.gson.JsonSyntaxException:java.lang.Illegal
我正在尝试获取应用程序中的屏幕尺寸,但我的标题中出现错误。 token “大小”的语法错误,此 token 后应为 VariableDeclaratorId 这是我的代码: 显示 map .java
在 android 位置管理器中,我们应该提供更新的最小距离变化和更新之间的最短时间。因此我需要知道我应该提供多长时间的最小距离范围和最短时间间隔才能尽快知道当前位置? 最佳答案 虽然将两个值都设置为
我是一名优秀的程序员,十分优秀!