无法使用类函数更改在main中创建的int值

时间:2014-09-05 07:45:45

标签: c# visual-studio-2012

- 我无法使用类函数更改在main中创建的int值 -

我正在制作游戏,我有一个名为sideCollision的函数,用于检查玩家是否正在触摸pictureBox,如果玩家正在触摸pictureBox,则会调用Score的整数增加1。

这是功能:

public void sideCollision(Control player,Control pointRadius,Control topPipe,Control bottomPipe,Control gameOver,int force,bool timer,int score,int pointRadiusCounter)
{
    if (player.Right > pointRadius.Left && player.Left < pointRadius.Right - player.Width / 2 && player.Bottom > pointRadius.Top)
    {
        if (timer == true && pointRadiusCounter == 0)
        {
            pointRadiusCounter = 1;
            score++;
        }
    }
}

该功能检测到玩家触摸墙壁,但它没有将分数增加1.我在主要说法中也有一条消息&#34;分数尚未分配,并且总是有其默认值0&#34;

我需要知道如何使用该函数更改分数值,因为该函数不会更改Score的值

3 个答案:

答案 0 :(得分:0)

请原谅我这有点偏离现实,但这可能会帮助你避免像现在这样的问题:

  

我会考虑考虑哪些变量需要传递为   参数和哪些变量也可以从您的所有人访问   因为它们的价值,无论是否改变,都是   在你的代码的任何一点都是一样的(例如玩家的生命点,   玩家得分,玩家位置)。

     

然后你可以将它们转移到一个自己的类中(对于这个例子来说)   &#34;播放&#34; class),使这些变量的属性,和   通过制作属性,使其他类可访问   如果只有1位玩家,则public staticSingleton-class   游戏。

     

传递一定数量的变量   sideCollision(...)会在您的项目中造成很多麻烦   变大了安排和优先处理变量,方法,   课程等可以帮助你防止这种情况。所以慢慢来思考吧   关于什么是重要的,你需要什么,以及类似的东西。

答案 1 :(得分:0)

在这种情况下,你不应该使用pass-by-reference。相反,你可以在这种情况下使用这样的东西。

private void SomeMethod()
{
    var score = 0;
    var pointRadiusCounter = 0;
    if (CollisionOccurred(...))
    {
        score++;
        pointRadiusCounter++;
    }
    ...
    ...
    ...
}

public bool CollisionOccurred(Control player,Control pointRadius,Control topPipe,Control bottomPipe,Control gameOver,int force,bool timer)
{
    if (player.Right > pointRadius.Left && player.Left < pointRadius.Right - player.Width / 2 && player.Bottom > pointRadius.Top)
    {
        if (timer == true && pointRadiusCounter == 0)
        {
            return true;
        }
    }
    return false;
}

答案 2 :(得分:-1)

int是一种值类型。这意味着它通过值传递,在函数内部有原始变量的副本。你可以通过显式传递它来解决这个问题:

public void sideCollision(Control player,Control pointRadius,Control topPipe,Control bottomPipe,Control gameOver,int force,bool timer, ref int score, ref int pointRadiusCounter)
{
    if (player.Right > pointRadius.Left && player.Left < pointRadius.Right - player.Width / 2 && player.Bottom > pointRadius.Top)
    {
        if (timer == true && pointRadiusCounter == 0)
        {
            pointRadiusCounter = 1;
            score++;
        }
    }
}