Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WP7.1中的加速计数据问题?_C#_Windows Phone 7_Xna_Xna 4.0 - Fatal编程技术网

C# WP7.1中的加速计数据问题?

C# WP7.1中的加速计数据问题?,c#,windows-phone-7,xna,xna-4.0,C#,Windows Phone 7,Xna,Xna 4.0,我正在做一个简单的游戏来实现加速计数据,这个想法是加速计数据决定了在屏幕上漫无目的的球的加速度,球不会从屏幕边缘掉下来,所以当它撞到墙上时,速度是相反的 问题是有时球的行为非常好,正如预期的那样,其他时候,球在屏幕上的点上跳下,我无法跟踪问题,下面是代码: public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch;

我正在做一个简单的游戏来实现加速计数据,这个想法是加速计数据决定了在屏幕上漫无目的的球的加速度,球不会从屏幕边缘掉下来,所以当它撞到墙上时,速度是相反的

问题是有时球的行为非常好,正如预期的那样,其他时候,球在屏幕上的点上跳下,我无法跟踪问题,下面是代码:

public class Game1 : Microsoft.Xna.Framework.Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    Texture2D BallTexture;
    Vector2 BallPosition;
    Vector2 BallSpeed;
    Vector2 BallAcc;

    float CoFriction = 0.15F;

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";


        //set to full screen
        graphics.IsFullScreen = true;

        // Frame rate is 30 fps by default for Windows Phone.
        TargetElapsedTime = TimeSpan.FromTicks(333333);

        // Extend battery life under lock.
        InactiveSleepTime = TimeSpan.FromSeconds(1);
    }


    protected override void Initialize()
    {

        //speed,position,acceleration
        BallSpeed = Vector2.Zero;
        BallAcc = Vector2.Zero;
        BallPosition = new Vector2(240,400);


        //Accelerometer
        Accelerometer acc = new Accelerometer();
        acc.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(readingChanged);
        acc.Start();

        base.Initialize();
    }

    public void readingChanged(object sender, AccelerometerReadingEventArgs e)
    {

        Deployment.Current.Dispatcher.BeginInvoke(() => handleAccChange(e));
    }
    public void handleAccChange(AccelerometerReadingEventArgs e)
    {
        BallAcc.X = -(float)Math.Round((float)e.Y);
        BallAcc.Y = -(float)Math.Round((float)e.X);

    }
    protected override void LoadContent()
    {
        BallTexture = Content.Load<Texture2D>("football2");
        spriteBatch = new SpriteBatch(GraphicsDevice);


    }


    protected override void UnloadContent()
    {

    }


    protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        BallSpeed += BallAcc;
        BallPosition += BallSpeed;



        //Check Borders
        if (BallPosition.X < 0 || BallPosition.X > 800 - 51)
        {

            if (BallPosition.X < 0)
                BallPosition.X = 5;
            else if (BallPosition.X > 800 - 51)
                BallPosition.X = 800 - 55;
            BallSpeed.X = -BallSpeed.X * CoFriction;

            if (BallPosition.Y < 0 || BallPosition.Y > 480 - 51)
            {

                if (BallPosition.Y < 0)
                    BallPosition.Y = 5;
                if (BallPosition.Y > 480 - 51)
                    BallPosition.Y = 480 - 55;
                BallSpeed.Y = -BallSpeed.Y * CoFriction;

            }
            base.Update(gameTime);
            return;
        }
        if (BallPosition.Y < 0 || BallPosition.Y > 480 - 51)
        {
            BallSpeed.Y = -BallSpeed.Y*CoFriction;
            if (BallPosition.Y < 0)
                BallPosition.Y = 5;
            if (BallPosition.Y > 480 - 51)
                BallPosition.Y = 480 - 55;

            if (BallPosition.X < 0 || BallPosition.X > 800 - 51)
            {
                BallSpeed.X = -BallSpeed.X*CoFriction;
                if (BallPosition.X < 0)
                    BallPosition.X = 5;
                if (BallPosition.X > 800 - 51)
                    BallPosition.X = 800 - 55;

            }
            base.Update(gameTime);
            return;
        }




        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        spriteBatch.Begin();
        spriteBatch.Draw(BallTexture, BallPosition, Color.White);
        spriteBatch.End();


        base.Draw(gameTime);
    }
}
公共类游戏1:Microsoft.Xna.Framework.Game
{
图形管理器图形;
SpriteBatch SpriteBatch;
纹理2d球状纹理;
矢量2球位;
矢量2球速;
矢量2巴拉克;
浮球摩擦系数=0.15F;
公共游戏1()
{
graphics=新的GraphicsDeviceManager(此);
Content.RootDirectory=“Content”;
//设置为全屏
graphics.IsFullScreen=true;
//Windows Phone的帧速率默认为30 fps。
targetExpressedTime=时间跨度(333);
//在锁定状态下延长电池寿命。
InactiveSleepTime=时间跨度(从秒开始)(1);
}
受保护的覆盖无效初始化()
{
//速度、位置、加速度
球速=矢量2.0;
巴拉克=矢量2.0;
球位=新矢量2(240400);
//加速计
加速计acc=新加速计();
acc.ReadingChanged+=新事件处理程序(ReadingChanged);
acc.Start();
base.Initialize();
}
公共无效读取已更改(对象发送器、加速计修订目标e)
{
Deployment.Current.Dispatcher.BeginInvoke(()=>handleAccChange(e));
}
公共无效手动更改(加速计修订版)
{
BallAcc.X=-(浮点)数学圆((浮点)e.Y);
BallAcc.Y=-(浮点)数学圆((浮点)e.X);
}
受保护的覆盖void LoadContent()
{
BallTexture=Content.Load(“足球2”);
spriteBatch=新spriteBatch(图形设备);
}
受保护的覆盖无效UnloadContent()
{
}
受保护覆盖无效更新(游戏时间游戏时间)
{
//允许游戏退出
if(GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed)
这是Exit();
BallSpeed+=BallAcc;
球位+=球速;
//检查边界
如果(球位.X<0 | |球位.X>800-51)
{
if(球位X<0)
球位X=5;
否则如果(球位X>800-51)
球位X=800-55;
BallSpeed.X=-BallSpeed.X*CoFriction;
如果(球位Y<0 | |球位Y>480-51)
{
if(球位Y<0)
球位Y=5;
如果(球位Y>480-51)
球位Y=480-55;
BallSpeed.Y=-BallSpeed.Y*CoFriction;
}
更新(游戏时间);
返回;
}
如果(球位Y<0 | |球位Y>480-51)
{
BallSpeed.Y=-BallSpeed.Y*CoFriction;
if(球位Y<0)
球位Y=5;
如果(球位Y>480-51)
球位Y=480-55;
如果(球位.X<0 | |球位.X>800-51)
{
BallSpeed.X=-BallSpeed.X*CoFriction;
if(球位X<0)
球位X=5;
如果(球位X>800-51)
球位X=800-55;
}
更新(游戏时间);
返回;
}
更新(游戏时间);
}
受保护覆盖无效绘制(游戏时间游戏时间)
{
图形设备。清晰(颜色:矢车菊蓝);
spriteBatch.Begin();
spriteBatch.Draw(球纹理、球位置、颜色、白色);
spriteBatch.End();
基础。抽签(游戏时间);
}
}

我是WP7开发中的新手,但VS10说Accelerator.ReadingChanged不受欢迎,应该使用.CurrentValueChanged事件。其余的似乎差不多。我发现那篇文章:

只需向下滚动到“关于芒果的一些重要注释”

祝你好运,快乐