我正在尝试使用变量gameTime.ElapsedGameTime.TotalMilliseconds移动2D测试精灵;
更新sprites位置的代码是这样的:
spritePosition.X += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
Run Code Online (Sandbox Code Playgroud)
使用上面的行,精灵在运行时按预期向右移动.
但是我不明白为什么我需要"+ =".即为什么没有以下工作:
spritePosition.X = (float)gameTime.ElapsedGameTime.TotalMilliseconds;
Run Code Online (Sandbox Code Playgroud)
(我知道x + = 1是x = x + 1的简写)
我将gameTime传递给更新函数,不应该不断变化(因此不断移动精灵)?我觉得我错过了一些直接的东西!
编辑:精灵不加速.(我可以通过使用秒而不是毫秒来测试它,它显然每秒只移动1个像素,而不是加速)
信息:
语言:C#我正在使用XNA Windows游戏模板在更新功能中调用上面的单行
我正在尝试将屏幕管理实现到我的XNA游戏中.
到目前为止,我已经通过以下链接成功实现了示例3:http://www.xnadevelopment.com/tutorials/thestateofthings/thestateofthings.shtml
我当前的屏幕切换事件如下:
public void GoToScreenOverview(object obj, EventArgs e)
{
screenStart = null;
screenOverview = new ScreenOverview(this, new EventHandler(GoToScreenOverview), globalVariables);
mCurrentScreen = screenOverview;
}
Run Code Online (Sandbox Code Playgroud)
这从(初始)屏幕"开始"移动,并将游戏移动到下一个屏幕"概述".等效的互惠方法GoToScreenStart则相反.
我的问题是:我如何管理所有活动?
假设我有20个屏幕.每个屏幕类都需要传递19个EventHandler,这看起来非常低效,并且使添加新屏幕变得很麻烦.目前GoToScreenX类型是Game1类中的事件,但在我看来,对于每个Screen继承的"BaseScreen"类中的所有事件更有意义.
我对C#很陌生,并且完全是自学成功的试验和(很多)错误,所以如果这是一个愚蠢的问题,请提前道歉.
到目前为止,在创建类时,我几乎只是公开了每个变量,所以我可以用它们做我想做的事.
在阅读了很多关于为什么这是一个坏主意(不是我完全理解它)之后,我现在倾向于写道:
public string name { get; set; }
Run Code Online (Sandbox Code Playgroud)
而不是我之前使用的:
public string name;
Run Code Online (Sandbox Code Playgroud)
我理解这是简单的简写(我可以看出为什么它对插入断点很有用,并且使用如下公式字符串{get; private set;}.
但是,以下是什么简写:
private double _grip;
public double grip
{
get
{
return _grip;
}
set
{
if (value > 100) { _grip = 100; }
else if (value < 0) { _grip = 0; }
else { _grip = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
每次我想在变量上添加条件时,必须声明一个私有变量似乎有点笨拙.
我想写的是这样的:
public double grip
{
get;
set
{
if (value > 100) { grip = 100; }
else if (value …Run Code Online (Sandbox Code Playgroud)