[英]How to change move in my TicTacToe game in Unity C#?
我正在开发一款 TicTacToe 游戏,但遇到了一些问题。
放置“X”后,我需要在ChangeMove()
function 中将changeMove
更改为true
,以便将下一步作为“O”放在另一个地方。 我也需要检查place.sprite == null
,因为我不想再次更改 put move。
在If
块中,我将 changeMove 更改为适当的值,但它没有改变(我的意思是当我第二次调用 OnMouseDown 方法时,我无法进入else if
块)。 这是我的MainCamera
检查员:
我创建了一个脚本(PutMove.cs),它继承了 LogicOfGame.cs 的所有方法和字段,除了private bool changeMove
仅用于可点击的方块以将移动放在那里:
这是我的 LogicOfGame.cs、PutMove.cs 脚本和第一个方块的检查器:
广场巡视员:
LogicOfGame.cs:
public class LogicOfGame : MonoBehaviour
{
public SpriteRenderer place;
private bool changeMove;
public Image X;
public Image O;
public void ChangeMove()
{
if (!changeMove && place.sprite == null)
{
place.sprite = X.sprite;
changeMove = !changeMove;
}
else if (changeMove && place.sprite == null)
{
place.sprite = O.sprite;
changeMove = !changeMove;
}
}
{
PutMove.cs:
public class PutMove : LogicOfGame
{
private void OnMouseDown()
{
ChangeMove();
}
}
我还尝试在另一种方法中更改changeMove
值并在OnMouseDown()
方法中调用它,但没有帮助
public bool ChangeMove(bool changeMove)
{
return !changeMove;
}
public class PutMove : LogicOfGame
{
private void OnMouseDown()
{
//renamed the ChangeMove()
//And left only place.sprite = X.sprite;
PutMove();
changeMove = ChangeMove(changeMove);
}
}
最后如何更改changeMove
的值?
设置断点并逐步执行代码。 当你遇到if/else
条件时, place.sprite == null
真的是true
吗? 我不了解 Unity,但在我看来,这只有在第一次调用该方法时才是true
的。 之后,它被设置为X.sprite
或O.sprite
,因此后续调用不会有任何影响,因为条件将评估为false
。
如果是这种情况,则删除null
检查应该可以解决问题:
public void ChangeMove()
{
if (changeMove) place.sprite = O.sprite;
else place.sprite = X.sprite;
changeMove = !changeMove;
}
您甚至可以去掉changeMove
变量,只检查place.sprite
的值:
public void ChangeMove()
{
if (place.sprite == O.sprite) place.sprite = X.sprite;
else place.sprite = O.sprite;
}
ChangeMove()
只有一次为真,因为您将place.sprite
的值设置为第一次调用,然后它就再也不能改变了。
正如 Rufus L 所说,删除place.sprite == null
条件应该没有问题,因为看起来 function(按原样)只处理第一步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.