我試圖實現一個非常基本的2D遊戲,當敵人在屏幕上時,它會在設置點(50和500)之間來回跳動,類似於太空侵略者的事情。我的問題是我只能讓它走向正確,但不能回到左邊並重復。在Monogame/XNA中來回移動敵人
我打亂了自己的編碼,然後纔開始研究它,並且實際上弄清楚了,但是我認爲我有一些可以工作的東西,但是它沒有,我的問題是我不明白爲什麼。 我的代碼應該像一個開關一樣工作,兩個if語句在Update循環中,一個在另一個下去,一個在右邊移動,另一個在左邊移動,我認爲這很好,但是它沒有這樣做。它移動它的權利很好,但是然後左邊的部分不起作用。
那麼,爲什麼下面的代碼不起作用?
namespace _2D_game_num1
{
class Enemy
{
int health;
Vector2 enemy_location = new Vector2(50, 50);
Vector2 enemy_speed = new Vector2(1, 1);
Player player = new Player("dummy");
public Enemy()
{
health = 100;
}
public void UpdateLocation()
{
//Vector2 player_pos = player.GetLocation();
//if (player_pos.X < 200)
// Using the players location to figure out where the enemy should move
bool right = true;
bool left = false;
if (right)
{
enemy_location.X += enemy_speed.X;
if (enemy_location.X == 500)
{
right = false;
left = true;
}
}
if (left)
{
enemy_location.X -= enemy_speed.X;
if (enemy_location.X == 50)
{
right = true;
left = false;
}
}
}
public Vector2 GetLocation()
{
return enemy_location;
}
}
}
然後在主遊戲類中我擁有它so enemy1.UpdateLocation();是正確的更新部分(以及我的球員運動,工作正常)。
你不需要'right'和'left'變量。通過擁有一個「正確」變量來簡化事物。如果這是真的,你就向右移動。如果它是假的,你就向左移動。此外,要小心,因爲向量是基於浮動,你應該避免測試平等(同樣適用於雙打)。你最好使用'> = 500'和'<= 50'來避免任何「接近但不是500或50」的錯誤。 – itsme86
另外一個問題,你需要做一個單一的'right'變量我正在談論一個類成員,而不是'UpdateLocation()'的局部變量。由於這種方法本地化,因此不能保留其價值。每次你現在調用'UpdateLocation()',它都會將'right'重置爲'true','left'重置爲'false'。這可能是你遇到的主要問題。 – itsme86