我有一些简单的运动代码,唯一的问题是对角线运动比 X 和 Y 运动更快。我知道如何在 Unity 中标准化这一点,但不知道如何在 Monogame 中标准化。
private Vector2 _position;
protected override void Update(GameTime gameTime)
{
if (Keyboard.GetState().IsKeyDown(Keys.W))
{
_position.Y -= 1;
}
if (Keyboard.GetState().IsKeyDown(Keys.S))
{
_position.Y += 1;
}
if (Keyboard.GetState().IsKeyDown(Keys.A))
{
_position.X -= 1;
}
if (Keyboard.GetState().IsKeyDown(Keys.D))
{
_position.X += 1;
}
}
Run Code Online (Sandbox Code Playgroud)
这应该是所有相关代码,如果您需要更多,请告诉我。
我正在制作一个测试 xna 游戏作为学习练习,我有一个关于使用 2d 纹理的小问题。基本上,游戏是从文本地图文件中获取的不同“图块”的网格。我基本上只是在初始化关卡时解析文件并创建不同图块类型的矩阵。该关卡本质上是一桶墙砖和钉子。所以本质上,有很多墙砖和多个尖钉砖,然后还有很多空砖。然而,有四种类型的墙砖和钉状纹理来覆盖不同的方向。
我的问题是加载每个图块纹理的最佳方法是什么?我是否为每个图块加载单独的纹理?即当我创建一个图块时,向它传递一个texture2d,我可以同时绘制和加载纹理。这似乎是一个好方法,但是我必须单独加载每个图块纹理,这似乎很浪费。
我能想到的另一个选择是在图块结构中使用静态纹理,然后简单地将此纹理加载为具有不同墙壁和尖峰的图块图集。这样我只加载单个纹理,然后在绘制时我只需将一个矩形移动到精灵内适当图块的区域。
我不确定从性能角度来看,这些方法中哪一种是最佳的,或者是否有其他方法?
提前致谢
我正在运行的程序和版本:
问题:当我在下面的循环中更新我的游戏时,我打开任务管理器,看到该程序占用了25个CPU!这太过分了.
循环:
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
// TODO: Add your update logic here
if (angleCounter != 359)
angleCounter++;
else
angleCounter = 0;
base.Update(gameTime);
}
Run Code Online (Sandbox Code Playgroud)
循环使角度(度)增加,使得我正在绘制的图像(png)不断旋转
绘图部分:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
// TODO: Add your drawing code here
Vector2 location = new Vector2(200, 200);
Rectangle sourceRectangle = new Rectangle(0, 0, sprite.Width, sprite.Height);
Vector2 origin = new Vector2(sprite.Width / 2, …Run Code Online (Sandbox Code Playgroud) 我知道这个问题对那些熟悉平铺和单一游戏的人来说非常具体,所以我会尽量做到尽可能彻底.我已经在这个问题上工作了15个多小时,我很绝望.
我正在尝试使用Tiled的对象层将精灵绘制到屏幕上.我已经创建了一个新的对象图层,为它绘制了一些矩形,并添加了一个我在LoadContent方法中引用的自定义属性.
这是我的LoadContent方法:
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
mymap = Content.Load<TiledMap>("Misc/newmap");
enemyShip = Content.Load<Texture2D>("Enemies/enemyship");
//TiledMapObject[] islands = mymap.GetLayer<TiledMapObjectLayer>("Islands").Objects;
ship_sprite = Content.Load<Texture2D>("character/wooden_ship");
Texture2D texture = Content.Load<Texture2D>("character/anima2");
animatedSprite = new AnimatedSprite(texture, 1, 2);
font = Content.Load<SpriteFont>("Misc/londrinasolid");
Song song = Content.Load<Song>("Music/Chad_Crouch_-_Stellars_Jay");
MediaPlayer.Volume = 0.7F;
MediaPlayer.Play(song);
TiledMapObject[] littleBoats = mymap.GetLayer<TiledMapObjectLayer>("SmallBoats").Objects;
foreach (var en in littleBoats)
{
string type;
en.Properties.TryGetValue("type", out type);
if (type == "smallboat")
{
Enemy.enemies.Add(new SmallBoat(en.Position)); …Run Code Online (Sandbox Code Playgroud) 我知道有很多帖子讨论这个问题,但现在已经过去几年了。
我开始使用 Unity 并想开始开发 2D 游戏。Unity 是一个非常好的引擎,能够处理 2D,但显然这个游戏引擎是为 3D 设计的。
其他引擎或框架可能使用脚本语言,但我想使用 C# 作为我的主要语言。我知道 Godot 支持 C#,但它专注于 GDScript。
我刚刚读到 Monogame,想知道它是否仍然值得使用或已经过时。我说的过时是指它不再被维护或者没有多少人再使用它。
我试图限制 Monogame XNA 项目的“每秒帧数”,但我的 limitFrames函数不准确。
例如,我的项目在没有限制器的情况下以 60 fps 运行。但是,当我使用限制器并将frameRateLimiter变量设置为每秒 30 帧时,该项目的最大 fps 约为 27。
有人能找到解决方案吗?
private float frameRateLimiter = 30f;
// ...
protected override void Draw(GameTime gameTime)
{
float startDrawTime = gameTime.TotalGameTime.Milliseconds;
limitFrames(startDrawTime, gameTime);
base.Draw(gameTime);
}
private void limitFrames(float startDrawTime, GameTime gameTime)
{
float durationTime = startDrawTime - gameTime.TotalGameTime.Milliseconds;
// FRAME LIMITER
if (frameRateLimiter != 0)
{
if (durationTime < (1000f / frameRateLimiter))
{
// *THE INACCERACY IS MIGHT COMING FROM THIS LINE*
System.Threading.Thread.Sleep((int)((1000f / frameRateLimiter) …Run Code Online (Sandbox Code Playgroud) 我正在编写 ac# monogame。我有一个英雄,他可以射击。我想要那个,当他击中一个精灵(这里:一个简单的球)时,这个球应该在地图上被删除。
这是我的绘画方法
public void Draw(GameTime gameTime)
{
mMap.Draw(ScreenManager.mSprites);
ScreenManager.mSprites.Begin();
ScreenManager.mSprites.Draw(mTest, mHeroPos, Color.White);
ScreenManager.mSprites.Draw(mBall, new Rectangle(120, 120, 50, 50), Color.White);
DrawEffects();
ScreenManager.mSprites.End();
}
Run Code Online (Sandbox Code Playgroud)
我没有删除地图上球的代码,因为我不知道它。我有更多代码,但在这里展示它太多了,我认为这对我的问题并不重要。在这段代码中,我的英雄可以在精灵上行走和射击。一切都很完美。总而言之,我的问题是,我想用精灵射击,然后精灵应该消失。感谢帮助
I am trying to make a scrolling level to a test game I am doing as a learning exercise. I have created a map containing lots of tiles which are drawn according to their position in an array. I basically want the camera to scroll down the level, but at the moment it just frantically shakes up and down a little bit.
I have a camera class which is just a blank static class containing a static vector2 for the …
我想制作一个RPG并想知道我是否应该使用Xna或Monogame来编码它.什么会有更好的结果或更简单的代码.我研究了一下但仍然无法决定.
抱歉我的问题,我知道这是一个愚蠢的问题。我想开始游戏开发,我应该从哪里开始?我应该从 libGDX、Love2D 还是 Monogame 开始。我知道如何使用这种语言(JAVA、LUA 和 C#)进行编程。我只是想从那些比我更有经验的人那里获得意见。请帮助我。谢谢
我已经知道我可以使用XNA使C#与Mac/Linux通过monogame兼容,但是monogame是从C#单独开发的,所以没有人知道它们是否能跟上C#的开发?
使用C#是否值得冒险,或者我应该安全地使用Java编程以实现跨平台兼容性吗?
我想知道gameTime.ElapsedGameTime.TotalSeconds一秒钟的确切价值是什么?
我一直在到处寻找,但没有找到在子窗体打开时禁用主窗体的代码(我可能只是措辞错误。就像当您打开文件时,如果您尝试单击应用程序打开闪光灯并发出声音。
当我处于非主要形式的第二种形式时,如何禁用应用程序?
编辑:所以这就是放置它的地方,因为每个人都在问
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
New_File newFile = new New_File();
if (newFile.ShowDialog() == DialogResult.OK)
{
}
}
Run Code Online (Sandbox Code Playgroud)
编辑 2:花费 16 秒打开文件,如下所示:
既然你拿走了我所有的代表,我必须发布一个链接http://puu.sh/aDBF4/9d7fd31926.png
我仍然不明白为什么当我不知道 ShowDialog 是什么的时候你们仍然对我投反对票。
monogame ×13
c# ×10
xna ×7
game-engine ×2
xna-4.0 ×2
2d ×1
camera ×1
draw ×1
drawing ×1
frame-rate ×1
java ×1
libgdx ×1
love2d ×1
mono ×1
monodevelop ×1
performance ×1
spritebatch ×1
texture2d ×1
tiled ×1
winforms ×1