不能发射两次火球
Can't shoot fire ball twice
所以我正在制作一款类似于 Space Invaders 的游戏,只包含 Poke'mon。在游戏中,玩家(Charmeleon)应在按下 Space 键时发射火球(每次按下一个火球)。问题是当我按下 Space 键时,玩家只需按下一次即可同时发射所有火球。我该如何解决?在我完成后,我会将游戏免费提供给能解决我问题的人。这是我的代码:
if (ableToFire == true)
{
GameObject Flame = GameObject.Find("Fire");
if (usedFire == 0)
{
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("Fire");
Flame.GetComponent<SpriteRenderer>().enabled = true;
Flame.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);
usedFire++;
Debug.Log("You used fire " + usedFire + " times");
}
}
GameObject Flame2 = GameObject.Find("Fire 2");
if (usedFire == 1)
{
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("Fire");
Flame2.GetComponent<SpriteRenderer>().enabled = true;
Flame2.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);
usedFire++;
Debug.Log("You used fire " + usedFire + " times");
}
}
}
The player shoots all of the fire balls at the same time after only
one press.
如果我们检查您的代码流,我们可以更清楚地了解为什么会发生这种情况。首先我们检查玩家是否能够开火,如果他是,我们然后额外检查 usedFire
整数是 0 还是 1。
现在的问题是,在进入代码的 usedFire == 0
部分后,我们增加了 usedFire
变量,然后我们离开函数,然后检查 usedFire
变量是 1。它是,因为我们刚刚增加了它。
现在再次调用代码的第二部分,将 usedFire
变量增加到 3。重新调用代码的另一部分,因此不再产生火球。
if (ableToFire != true || !Input.GetKeyDown(KeyCode.Space)) {
// If the player can't fire or hasn't pressed space, skip the rest of the code.
return;
}
if (usedFire == 0) {
Flame.GetComponent<SpriteRenderer>().enabled = true;
Flame.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);
usedFire++;
Debug.Log("You used fire " + usedFire + " times");
}
else if(usedFire == 1) {
Flame2.GetComponent<SpriteRenderer>().enabled = true;
Flame2.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);
usedFire++;
Debug.Log("You used fire " + usedFire + " times");
// Reset usedFire so we can use it again.
usedFire = 0;
}
我还建议您将两个 GameObject.Find()
调用都移动到 Start()
方法中,因为每帧搜索 2 个 GameObject 确实会对游戏性能造成负担。
GameObject Flame;
GameObject Flame2;
private void Start() {
Flame = GameObject.Find("Fire");
Flame2 = GameObject.Find("Fire 2");
}
所以我正在制作一款类似于 Space Invaders 的游戏,只包含 Poke'mon。在游戏中,玩家(Charmeleon)应在按下 Space 键时发射火球(每次按下一个火球)。问题是当我按下 Space 键时,玩家只需按下一次即可同时发射所有火球。我该如何解决?在我完成后,我会将游戏免费提供给能解决我问题的人。这是我的代码:
if (ableToFire == true)
{
GameObject Flame = GameObject.Find("Fire");
if (usedFire == 0)
{
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("Fire");
Flame.GetComponent<SpriteRenderer>().enabled = true;
Flame.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);
usedFire++;
Debug.Log("You used fire " + usedFire + " times");
}
}
GameObject Flame2 = GameObject.Find("Fire 2");
if (usedFire == 1)
{
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("Fire");
Flame2.GetComponent<SpriteRenderer>().enabled = true;
Flame2.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);
usedFire++;
Debug.Log("You used fire " + usedFire + " times");
}
}
}
The player shoots all of the fire balls at the same time after only one press.
如果我们检查您的代码流,我们可以更清楚地了解为什么会发生这种情况。首先我们检查玩家是否能够开火,如果他是,我们然后额外检查 usedFire
整数是 0 还是 1。
现在的问题是,在进入代码的 usedFire == 0
部分后,我们增加了 usedFire
变量,然后我们离开函数,然后检查 usedFire
变量是 1。它是,因为我们刚刚增加了它。
现在再次调用代码的第二部分,将 usedFire
变量增加到 3。重新调用代码的另一部分,因此不再产生火球。
if (ableToFire != true || !Input.GetKeyDown(KeyCode.Space)) {
// If the player can't fire or hasn't pressed space, skip the rest of the code.
return;
}
if (usedFire == 0) {
Flame.GetComponent<SpriteRenderer>().enabled = true;
Flame.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);
usedFire++;
Debug.Log("You used fire " + usedFire + " times");
}
else if(usedFire == 1) {
Flame2.GetComponent<SpriteRenderer>().enabled = true;
Flame2.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);
usedFire++;
Debug.Log("You used fire " + usedFire + " times");
// Reset usedFire so we can use it again.
usedFire = 0;
}
我还建议您将两个 GameObject.Find()
调用都移动到 Start()
方法中,因为每帧搜索 2 个 GameObject 确实会对游戏性能造成负担。
GameObject Flame;
GameObject Flame2;
private void Start() {
Flame = GameObject.Find("Fire");
Flame2 = GameObject.Find("Fire 2");
}