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];
这意味着您将用作访问矩阵中这些元素的索引的变量需要在以下范围内:
0r [(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);} }