改变游戏循环中的价值
Posted
技术标签:
【中文标题】改变游戏循环中的价值【英文标题】:changing value in gameloop 【发布时间】:2018-01-24 02:00:56 【问题描述】:我有一个变量tail
。我在创建构造函数时为这个变量设置了一个值。我有一个changeTail()
方法,它定期将尾部更改 10 个像素(增加 10 个像素,然后减少 10 个像素)。
此方法在update
方法中调用,因此它是连续的。
我有另一种方法speedUp()
,当分数增加 10 时,它会加速玩家。要获得分数当前值,这也在update
方法中调用。
所以,当我想加快游戏速度时,我也想让尾巴更长。所以我使用speedUp()
为tail 设置了一个新值。
但问题是,由于在 update
方法中调用了 speedUp()
,它会一直为 tail
设置相同的值,而现在 tail
不会像在加速之前那样改变。
这是我的代码:
class Game
float tail;
boolean increasing;
int score;
public Game()
tail = 60;
increasing = false;
score = 0;
public void changeTail()
if(increasing)
tail += 1;
if(tail >= 60)
increasing = false;
else
tail -= 1;
if(tail <=50)
increasing = true;
public void speedUp()
if(score >= 20)
//player speed up
tail = 70;
public void update()
tailChange();
speedUp();
【问题讨论】:
很难从您的代码和描述中理解您究竟想要实现什么。你能重组你的问题,简化它吗?现在,我可以猜到,在您的speedUp()
方法中,您应该使用 tail += 10
而不是 tail = 70
,并且在 tailChange()
中增加 10 个 tail 的最大值和最小值。
我想做的是:在开始的时候,尾巴在 50-60 的间隔内变化。如果得分超过 20,尾巴应该在 60-70 之间变化。但我在 speedUp() 中检查分数,它在一秒钟内被调用 60 次,所以不是只设置一次 tail 的值并在 60-70 的间隔内更改它,而是一直将 tail 的值分配给 70,所以 tail 不会改变它价值。我希望它更清楚:)
可能还有一个定义 currentTailSize 的变量,并且您的 if 基于该值。类似 if(tail >= currentTailSize)... currenttailsize 仅在 speedUp() 方法上更新。希望它有所帮助:)
对不起,我现在看到了。我已经分享了解决方案
【参考方案1】:
添加附加变量maxTail
,并在score
>= 20 时将其增加10。在tailChange()
中,tail
在maxTail
和maxTail - 10
之间变化。
public class Game
float maxTail;
float tail;
boolean increasing;
int score;
int nextScoreGoal;
public Game()
maxTail = 60;
tail = maxTail;
increasing = false;
score = 0;
nextScoreGoal = 20;
public void update()
tailChange();
if (score >= nextScoreGoal)
nextScoreGoal += 20; // I assume that you will keep increasing tail?
speedUp();
public void tailChange()
if (increasing)
tail++;
if (tail >= maxTail)
increasing = false;
else
tail--;
if (tail <= maxTail - 10)
increasing = true;
public void speedUp()
maxTail += 10;
tail += 10;
或者只是把speedUp()
方法放在update()
之外,即在你增加score
的地方调用它。
【讨论】:
如果 score 超过 20,它会不断增加 maxTail 和 tail 的值,不是吗? 没问题,我想我已经用另一种方式找到了解决方案。如果可行,我会分享 当然,没关系。【参考方案2】:读完这篇文章 (https://answers.unity.com/questions/1193588/how-to-only-update-once-in-update-function.html) 我找到了答案。因此,我没有尝试在 speedUp() 中设置 tail 的值,而是在分数增加时设置它。例如,与砖块碰撞时分数会增加:
public void brickCollision()
if(/*check if collides with brick*/)
score +=1;
if(score >=20)
tail = 70;
现在可以完美运行了。是时候解决其他错误了:)
【讨论】:
以上是关于改变游戏循环中的价值的主要内容,如果未能解决你的问题,请参考以下文章