Frameworks XNA nullreferenceexception,框架类
我在摆弄一些三角形,然后做了这个。起初,我认为,我写的所有“方法”都是实例化的,但那些“方法”:设备、内容和效果;实际上都是空的。代码很好,我应该写什么来代替这些Frameworks XNA nullreferenceexception,框架类,frameworks,xna,nullreferenceexception,instantiation,Frameworks,Xna,Nullreferenceexception,Instantiation,我在摆弄一些三角形,然后做了这个。起初,我认为,我写的所有“方法”都是实例化的,但那些“方法”:设备、内容和效果;实际上都是空的。代码很好,我应该写什么来代替这些 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Micros
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
namespace Learning_Test1
{
class Triangle
{
GraphicsDevice device;
ContentManager content;
Effect effect;
VertexPositionColor[] vertices;
public void bob()
{
content.RootDirectory = "Content";
content.Load<Effect>("effects");
}
public void Initialize()
{
vertices = new VertexPositionColor[3];
vertices[0].Position = new Vector3(1, 0, 0);
vertices[0].Color = Color.Red;
vertices[1].Position = new Vector3(0, 0, 1);
vertices[1].Color = Color.Green;
vertices[1].Position = new Vector3(-1, 0, 0);
vertices[1].Color = Color.Blue;
}
public void Update()
{
}
public void Draw()
{
effect.CurrentTechnique = effect.Techniques["PretransformedPS"];
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
pass.Apply();
}
device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 1, VertexPositionColor.VertexDeclaration);
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用Microsoft.Xna.Framework;
使用Microsoft.Xna.Framework.Content;
使用Microsoft.Xna.Framework.Graphics;
名称空间学习测试1
{
阶级三角
{
图形设备;
ContentManager内容;
效应;
VertexPositionColor[]顶点;
公共图书馆
{
content.RootDirectory=“content”;
内容。荷载(“效应”);
}
公共无效初始化()
{
顶点=新的顶点曝光颜色[3];
顶点[0]。位置=新向量3(1,0,0);
顶点[0]。颜色=颜色。红色;
顶点[1]。位置=新向量3(0,0,1);
顶点[1]。颜色=颜色。绿色;
顶点[1]。位置=新向量3(-1,0,0);
顶点[1]。颜色=颜色。蓝色;
}
公共无效更新()
{
}
公众抽签()
{
effect.currentTechnical=effect.technologies[“预变压器”];
foreach(EffectPass-in-effect.currentTechnology.passs)
{
pass.Apply();
}
device.DrawUserPrimitives(PrimitiveType.TriangleList,顶点,0,1,VertexExpositionColor.VertexDeclaration);
}
}
}实际上,您唯一要初始化的是“顶点”数组。我看不出您实际上在哪里尝试初始化其他变量,除非您的问题中没有包含一些代码,例如,您实际上在哪里调用
Triangle testTriangle = new Triangle();
您应该在类的初始化函数中初始化其余的类变量、设备、内容和效果,除非您计划在其他地方设置它们。我上次使用XNA已经有一段时间了,但如果我没记错的话,在创建新游戏模板时,可能会为您初始化设备和内容,所以您需要做的就是将它们设置为等于testTriangle.Device和testTriangle.Content。如果不是的话,我强烈建议你看看XNA网站上的教程,因为它们非常棒,我100%相信你能从那里找到初始化它们的方法 那些(设备、内容和效果)不是“方法”,而是字段(又名变量或成员)。您需要在使用它们之前分配它们。内容和设备可能应该在类的构造函数中分配。您可以在游戏类中找到现有ContentManager实例。可以在构造函数中指定效果,也可以加载效果
此外,您只指定了两个顶点-这将导致不绘制任何内容。您没有实例化对象
内容,设备或效果。当您使用自己的类时,我会向它添加一个构造函数
,它接受这些对象,例如:
triangle(GraphicsDevice _device, ContentManager _content)
{
device = _device;
content = _content;
content.RootDirectory = "Content";
}
此外,在您的bob
方法中,您应该执行以下操作:
public void bob()
{
effect = content.Load<Effect>("effects");
}
public void bob()
{
效果=内容。负荷(“效果”);
}