XNA中从列表绘制矩形报错:无匹配的MapBounderies构造函数
解决XNA中创建MapBounderies实例的参数错误问题
别担心,刚接触XNA遇到这种构造函数参数问题很正常,我来帮你一步步理清:
错误原因
你定义的MapBounderies类只提供了一个带5个参数的构造函数,没有定义无参数的默认构造函数。当你尝试用new MapBounderies()创建实例时,编译器找不到匹配的无参构造方法,就会抛出你看到的参数不匹配错误。
两种解决方案
根据你的需求选一种就行:
方案1:添加无参数构造函数
如果你希望先创建实例,再后续设置属性,就给MapBounderies类加一个无参构造函数:
public class MapBounderies { public int boundY, boundX, boundWidth, boundLength; public Texture2D rectTexture; public Rectangle boundRectangle; public List<MapBounderies> boundsList = new List<MapBounderies>(); // 添加这个无参数构造函数 public MapBounderies() { // 可以在这里设置默认值,比如 boundX = 0; boundY = 0; boundWidth = 0; boundLength = 0; boundRectangle = Rectangle.Empty; } // 你原来的带参数构造函数 public MapBounderies(Rectangle bRectangle, int intX, int intY, int intWidth, int intLength) { boundY = intY; boundX = intX; boundWidth = intWidth; boundLength = intLength; // 这里建议加上对boundRectangle的赋值,不然传入的bRectangle没用上 boundRectangle = bRectangle; } // 你的Load、AddToList、Draw方法... }
这样你就能用MapBounderies mapBounderies = new MapBounderies();正常创建实例了。
方案2:调用带参数的构造函数
如果你想在创建实例时就传入所有必要参数,就按照构造函数的要求传值:
// 先创建一个Rectangle对象(或者用你需要的矩形) Rectangle targetRect = new Rectangle(100, 100, 100, 100); // 传入所有5个参数创建实例 MapBounderies mapBounderies = new MapBounderies(targetRect, 100, 100, 100, 100);
额外的小建议
- 你原来的构造函数里没有使用传入的
bRectangle参数给类的boundRectangle字段赋值,我已经在方案1的代码里补上了,不然这个参数等于白传哦。 - 你的
boundsList是类的实例字段,如果每个MapBounderies实例都有自己的列表,可能不是你想要的效果。如果是要维护一个全局的边界列表,建议把它改成静态字段:public static List<MapBounderies> boundsList = new List<MapBounderies>();,这样所有实例共享同一个列表。
内容的提问来源于stack exchange,提问作者sa1addd
相关产品推荐
相关产品推荐

