- 我无法使用类函数更改在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
的值
答案 0 :(得分:0)
请原谅我这有点偏离现实,但这可能会帮助你避免像现在这样的问题:
我会考虑考虑哪些变量需要传递为 参数和哪些变量也可以从您的所有人访问 因为它们的价值,无论是否改变,都是 在你的代码的任何一点都是一样的(例如玩家的生命点, 玩家得分,玩家位置)。
然后你可以将它们转移到一个自己的类中(对于这个例子来说) &#34;播放&#34; class),使这些变量的属性,和 通过制作属性,使其他类可访问 如果只有1位玩家,则
public static
或Singleton-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++;
}
}
}