小编use*_*166的帖子

用gameTime移动sprite,为什么我需要使用+ =?

我正在尝试使用变量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游戏模板在更新功能中调用上面的单行

c# xna

3
推荐指数
1
解决办法
529
查看次数

屏幕管理XNA C#

我正在尝试将屏幕管理实现到我的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# xna

1
推荐指数
1
解决办法
1062
查看次数

是否可以仅指定自动属性的一个操作(获取/设置)并使另一个实现?

我对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)

c# properties

0
推荐指数
1
解决办法
332
查看次数

标签 统计

c# ×3

xna ×2

properties ×1