Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在unity3d国际象棋游戏中,我无法选择或移动第7个位置的兵和车 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 公共类棋子:棋子{ //用于初始化 无效开始(){ } //每帧调用一次更新 无效更新(){ } 公共覆盖布尔[,]可能移动(){ bool[,]r=新bool[8,8]; 棋手c,c2; int[]e=BoardManager.Instance.enPassant; //白棋 如果(是白色的){ //对角左 如果(CurrentX!=0&&CurrentY!=7){ //调试日志(CurrentY); 如果(e[0]==CurrentX-1&&e[1]==CurrentY+1) r[(int)CurrentX-1,CurrentY+1]=真; c=BoardManager.Instance.Chessmans[(int)CurrentX-1,CurrentY+1]; 如果(c!=null&!c.isWhite){ r[(int)CurrentX-1,CurrentY+1]=真; } } //对角右 如果(CurrentX!=8&&CurrentY!=7){ Debug.Log(CurrentX); 如果(e[0]==CurrentX+1&&e[1]==CurrentY+1) r[(int)CurrentX+1,CurrentY+1]=真; c=BoardManager.Instance.Chessmans[(int)CurrentX+1,CurrentY+1]; 如果(c!=null&!c.isWhite){ r[(int)CurrentX+1,CurrentY+1]=真; 这是我的代码,我有一个问题,在“对角右”注释下面的条件下,它是在统一的索引外 我还有两个脚本boardmanager和chessman_C#_Unity3d - Fatal编程技术网

C# 在unity3d国际象棋游戏中,我无法选择或移动第7个位置的兵和车 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 公共类棋子:棋子{ //用于初始化 无效开始(){ } //每帧调用一次更新 无效更新(){ } 公共覆盖布尔[,]可能移动(){ bool[,]r=新bool[8,8]; 棋手c,c2; int[]e=BoardManager.Instance.enPassant; //白棋 如果(是白色的){ //对角左 如果(CurrentX!=0&&CurrentY!=7){ //调试日志(CurrentY); 如果(e[0]==CurrentX-1&&e[1]==CurrentY+1) r[(int)CurrentX-1,CurrentY+1]=真; c=BoardManager.Instance.Chessmans[(int)CurrentX-1,CurrentY+1]; 如果(c!=null&!c.isWhite){ r[(int)CurrentX-1,CurrentY+1]=真; } } //对角右 如果(CurrentX!=8&&CurrentY!=7){ Debug.Log(CurrentX); 如果(e[0]==CurrentX+1&&e[1]==CurrentY+1) r[(int)CurrentX+1,CurrentY+1]=真; c=BoardManager.Instance.Chessmans[(int)CurrentX+1,CurrentY+1]; 如果(c!=null&!c.isWhite){ r[(int)CurrentX+1,CurrentY+1]=真; 这是我的代码,我有一个问题,在“对角右”注释下面的条件下,它是在统一的索引外 我还有两个脚本boardmanager和chessman

C# 在unity3d国际象棋游戏中,我无法选择或移动第7个位置的兵和车 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 公共类棋子:棋子{ //用于初始化 无效开始(){ } //每帧调用一次更新 无效更新(){ } 公共覆盖布尔[,]可能移动(){ bool[,]r=新bool[8,8]; 棋手c,c2; int[]e=BoardManager.Instance.enPassant; //白棋 如果(是白色的){ //对角左 如果(CurrentX!=0&&CurrentY!=7){ //调试日志(CurrentY); 如果(e[0]==CurrentX-1&&e[1]==CurrentY+1) r[(int)CurrentX-1,CurrentY+1]=真; c=BoardManager.Instance.Chessmans[(int)CurrentX-1,CurrentY+1]; 如果(c!=null&!c.isWhite){ r[(int)CurrentX-1,CurrentY+1]=真; } } //对角右 如果(CurrentX!=8&&CurrentY!=7){ Debug.Log(CurrentX); 如果(e[0]==CurrentX+1&&e[1]==CurrentY+1) r[(int)CurrentX+1,CurrentY+1]=真; c=BoardManager.Instance.Chessmans[(int)CurrentX+1,CurrentY+1]; 如果(c!=null&!c.isWhite){ r[(int)CurrentX+1,CurrentY+1]=真; 这是我的代码,我有一个问题,在“对角右”注释下面的条件下,它是在统一的索引外 我还有两个脚本boardmanager和chessman,c#,unity3d,C#,Unity3d,谢谢你的帮助 由于您没有显示完整的代码,因此很难找到错误的确切位置。但我将向您解释问题所在以及如何解决 为可能的位置定义一个矩阵(二维数组): bool[,] r = new bool[8, 8]; 这意味着您将用作访问矩阵中这些元素的索引的变量需要在以下范围内: 0=0){if(selectedChessman==null){//Debug.Log(selectionX);SelectChessman(selectionX,selectionY);}否则{MoveChessman(selec

谢谢你的帮助


由于您没有显示完整的代码,因此很难找到错误的确切位置。但我将向您解释问题所在以及如何解决

为可能的位置定义一个矩阵(二维数组):

bool[,] r = new bool[8, 8];
这意味着您将用作访问矩阵中这些元素的索引的变量需要在以下范围内:

0

由于在访问矩阵中元素的同一时刻增加/减少该值,因此需要在之前添加一个条件。例如,对于这种情况:

r [(int)CurrentX - 1, CurrentY + 1] = true;
你应该写:

if(CurrentX > 0 && CurrentY < 7){
 r [(int)CurrentX - 1, CurrentY + 1] = true;
}
if(CurrentX>0&&CurrentY<7){
r[(int)CurrentX-1,CurrentY+1]=真;
}

每次访问矩阵时都要执行相同的操作
r

在出现错误时
CurrentX
CurrentY
的值是多少?您试图访问数组中不存在的元素。在访问数组中的元素之前,请先检查数组的大小7代表x,0代表yusingSystem.Collections;using System.Collections.Generic;using UnityEngine;公共抽象类ChessMan:MonoBehavior{public float CurrentX{set;get;}public int CurrentY{set;get;}public bool isWhite;public void SetPosition(float x,int y){CurrentX=x;CurrentY=y;}公共虚拟bool[,]PossibleMove(){return new bool[8,8];};DrawChessBoard();if(Input.GetMouseButtonDown(0)){if(selectionX>=0&&selectionY>=0){if(selectedChessman==null){//Debug.Log(selectionX);SelectChessman(selectionX,selectionY);}否则{MoveChessman(selectionX,selectionY);} }