无法在XNA中隐式转换类型

  • 本文关键字:转换 类型 XNA c# xna pong
  • 更新时间 :
  • 英文 :


我有一个反弹的球,我试着让它反弹一次,速度会更高。

在我的球课上,我有一个float speed;

我初始化了它:public ball(float speed) speed = 1f;

我有一个球移动的方法,看起来像这样:

public void BallMovement()
{
    if (movingUp) { ballRect.Y -= speed; }//Error
    if (!movingUp) {  ballRect.Y += speed; }//Error
    if (movingLeft) {  ballRect.X -= speed; }//Error
    if (!movingLeft) {  ballRect.X += speed; }//Error
    if (ballPosition.Y < 85)
    {
        movingUp = false;
    }
    if (ballPosition.Y >= 480)
    {
        movingUp = true;
    }

然后我将其添加到更新方法中:BallMovement();

在我尝试使用速度变量之前,它是有效的,因为这个错误,它不会编译:

无法将类型"float"隐式转换为"int"。存在显式转换(是否缺少强制转换?)

速度需要浮动。如果你想保持浮动的速度,你可以创建自己的矩形结构。你可以这样做:

        public struct RectangleF
    {
        float w = 0;
        float h = 0;
        float x = 0;
        float y = 0;
        public float Height
        {
            get { return h; }
            set { h = value; }
        }
        //put Width, X, and Y properties here
        public RectangleF(float width, float height, float X, float Y)
        {
            w = width;
            h = height;
            x = X;
            y = Y;
        }
        public bool Intersects(Rectangle refRectangle)
        {
            Rectangle rec = new Rectangle((int)x, (int)y, (int)w, (int)h);
            if (rec.Intersects(refRectangle)) return true;
            else return false;
        }
    }

相交检查并不是绝对完美的,但至少矩形的X和Y可以添加0.5。HTH

您正试图从int(ex:12)中减去一个float值(ex:1.223488);你不能这样做。要么将两个值都转换(强制转换)为浮点值,要么将两种值都转换为int:

 if (movingUp) { ballRect.Y -= (int)speed; }//Error

错误基本上是说"我们不能自动为您转换它(隐式),但您可以自己转换它(显式)。"我想看看MSDN关于类型转换的文章:http://msdn.microsoft.com/en-us/library/ms173105.aspx

speed是否需要为float?如果没有,你可以制作

int speed;

或者使用显式转换

if (movingUp) { ballRect.Y -= (int)speed; }// No Error

也许speed被声明为类型float

你可以通过将速度从浮点转换为整数来计算,如下所示:

public void BallMovement()
{
    int speedInt = Convert.Int32(speed);
    if (movingUp) { ballRect.Y -= speedInt; }
    if (!movingUp) {  ballRect.Y += speedInt; }
    if (movingLeft) {  ballRect.X -= speedInt; }
    if (!movingLeft) {  ballRect.X += speedInt; }
    if (ballPosition.Y < 85)
    {
        movingUp = false;
    }
    if (ballPosition.Y >= 480)
    {
        movingUp = true;
    }
    ....

另一方面,如果您希望编译器为您转换它(多次),您可以将引用speed的每种情况转换为(int)speed

相关内容

  • 没有找到相关文章

最新更新