我有一个变量tail
。我在创建构造函数时为此变量设置了一个值。我有一个changeTail()
方法,它会定期改变尾部10个像素(增加10个像素,然后减少10个像素)。
在update
方法中调用此方法,因此这是连续的。
我有另一种方法speedUp()
,当分数增加10时,它会加快玩家的速度。要获得分数当前值,也会在update
方法中调用此值。
所以,当我想加速游戏时,我也想让尾巴更长。所以我使用speedUp()
为tail设置了一个新值。
但问题是,由于在speedUp()
方法中调用了update
,因此它会为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();
}
}
答案 0 :(得分:0)
添加其他变量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
的位置调用它。
答案 1 :(得分:0)
阅读本文后(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;
}
}
}
现在它完美无缺。时间来解决其他错误:)