Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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#XNA桨式球类游戏_C#_Xna - Fatal编程技术网

C#XNA桨式球类游戏

C#XNA桨式球类游戏,c#,xna,C#,Xna,嘿,伙计,我正在做一个划板球/乒乓球游戏,我正在想办法让球像其他乒乓球游戏一样从划桨上随机“反弹”开 最简单的方法是什么 目前,我的碰撞代码只是使其在另一个方向反弹(向上) 你能告诉我怎么让它向两边弹起吗?就像在diaganol上一样。我假设有一个名为xspeed的变量,它控制球向左或向右移动的速度 乒乓球类游戏有两个主要功能 只要反转y轴速度,就像你正在做的那样(实际上) 反转y速度,但也改变x速度,这取决于球击中的“球棒”的位置。i、 e.在最右边击球会使球反弹到右边 对于选项2,您可以A)

嘿,伙计,我正在做一个划板球/乒乓球游戏,我正在想办法让球像其他乒乓球游戏一样从划桨上随机“反弹”开

最简单的方法是什么

目前,我的碰撞代码只是使其在另一个方向反弹(向上)


你能告诉我怎么让它向两边弹起吗?就像在diaganol上一样。

我假设有一个名为
xspeed
的变量,它控制球向左或向右移动的速度

乒乓球类游戏有两个主要功能

  • 只要反转y轴速度,就像你正在做的那样(实际上)
  • 反转y速度,但也改变x速度,这取决于球击中的“球棒”的位置。i、 e.在最右边击球会使球反弹到右边
  • 对于选项2,您可以A)根据球击中中间的距离直接设置xspeed,或者B)根据球击中中间的距离添加/减去xspeed

    var relativemidpoint = (ball.left + ball.width/2) -
                           (paddle.left + paddle.width/2);
    
    // Option A
    xspeed = relativemidpoint / 10; // or some other constant
    // Option B
    xspeed += relativemidpoint / 10; // or some other constant
    
    您可能还希望将xspeed限制在一个范围内,这样它就不会在侧面过快


    如果您希望总速度保持恒定,则必须根据
    xspeed
    的值缩放
    yspeed
    ,我假设球至少有4个变量:

    • 角度
    • 量级
    • X速度
    • Y速度
    角度+幅值形式a,我称之为v1。 要使其在“随机”方向上反弹(实际上,这从来都不是随机的),需要使用sinus和cosinus函数。我不会再解释三角形中的东西是如何工作的,但是你可以用它们来计算三角形中的每个长度和角度。所以你有:

    XSpeed = v1.Magnitude * cos(v1.Angle);
    YSpeed = v1.Magnitude * sin(v1.Angle);
    

    如果您需要了解更多信息,请访问。说真的,它真的很棒。

    不知道代码的其余部分这只是猜测,但是如果你有一个确定垂直速度和方向的yspeed变量。难道你没有一个X速度,你可以用同样的方式改变吗?我从来没有见过一个乒乓球游戏,其中“球”随机反弹“离开”,通常在乒乓球游戏中,球在Y轴上的方向只是在击球时反转。如果(ballrect.Intersects(PableRect)){yspeed=-yspeed;}
    XSpeed = v1.Magnitude * cos(v1.Angle);
    YSpeed = v1.Magnitude * sin(v1.Angle);